python - 在 Pandas 中使用 pd.Grouper 时获取所有组
问题描述
我有一个这样的数据框:
zone date a b
AL 2014-01-31 8.88 3286.6
AL 2014-01-31 0.61 1047.105
BS 2014-01-27 1.59 145.283
RF 2014-01-31 2.67 2842.35
RF 2014-01-31 3.4 0.26
我想按月份和区域分组
df.iloc[:, 1] = pd.to_datetime(df.iloc[:, 1])
g = df.groupby(['zone', pd.Grouper(key='date', freq='M')])
如果我使用pd.Grouper
只有一个区域
>>> g.groups.keys()
dict_keys([('AL', Timestamp('2014-01-31 00:00:00'))])
如果我不使用pd.Grouper
所有区域:
g = df.groupby('zone')
>>>> g.groups.keys()
dict_keys(['AL', 'BS', 'RF'])
我想按月对所有区域进行分组,以便结果类似于:
>>>> g.groups.keys()
dict_keys([('AL', Timestamp('2014-01-31 00:00:00')),
('BS', Timestamp('2014-01-31 00:00:00')),
('RF', Timestamp('2014-01-31 00:00:00'))])
这是我在这里的第一个问题,所以如果我能做得更好,请告诉我如何。
解决方案
这对我来说似乎是一个错误,因为如果我打印出来ngroups
,它会显示 3:
g = df.groupby(['zone', pd.Grouper(key='date', freq='M')])
g.ngroups
3
此外,如果我迭代,我会得到所有组键g
:
[k for k, _ in g]
[
('AL', Timestamp('2014-01-31 00:00:00', freq='M')),
('BS', Timestamp('2014-01-31 00:00:00', freq='M')),
('RF', Timestamp('2014-01-31 00:00:00', freq='M'))
]
另一个对我很有效的解决方案是g.indices
:
g.indices
{('AL', numpy.datetime64('2014-01-31T00:00:00.000000000')): array([0, 1]),
('BS', numpy.datetime64('2014-01-31T00:00:00.000000000')): array([2]),
('RF', numpy.datetime64('2014-01-31T00:00:00.000000000')): array([3, 4])}
推荐阅读
- jquery - jQuery 在 991px 下调整大小时改变了一个函数
- python-3.x - multiprocessing.Manager().dict() 无法更新二级值
- php - 我正在尝试使用 php 发送邮件,但单击发送按钮后页面为空白且没有错误..我不知道为什么
- c++ - 访问不同的会话 tty
- ruby - 使用 || 为变量赋值 Ruby中带有if条件的运算符
- python - 根据数据框生成 3 个不同的列
- reactjs - 入口点未定义,内容不是来自 webpack。我的配置有什么问题?
- c# - 我可以将 String 的一维数组转换为 Datacolumn 的一维数组吗?
- mysql - Laravel Eloquent 中的多级条件查询
- python - 替换数据框Python列中的多个值