我有一个类似的数据框:
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'))])
这是我在这里的第一个问题,所以如果我能做得更好,请告诉我如何。
答案 0 :(得分:1)
这对我来说似乎是一个错误,因为如果我打印出来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])}