我有下面的DataFrame,喜欢按月分组。
import pandas as pd
import numpy as np
idx = pd.date_range(start='2001-01-01', end='2002-01-01', periods = 80)
df = pd.DataFrame(np.random.rand(160).reshape(80,2), index=idx.normalize(), columns=['a','b'])
通过下面的代码,我可以按月份对df
进行分组,但它的索引标签是每个***日历***月份的最后几天,而不是df
中每个月的最后几天。
k = df.resample('M').apply(lambda x: x[-1])
k1 = df.groupby(pd.Grouper(freq='M')).last()
例如,df.loc['2001-01'].index[-1]
是Timestamp('2001-01-28 00:00:00')
,但不是Timestamp('2001-01-31 00:00:00')
。然而,k
和k1
包括如下的2001-01-31
。
a b
2001-01-31 0.521604 0.716046
2001-02-28 0.584479 0.560608
2001-03-31 0.201605 0.860491
2001-04-30 0.077426 0.711042
2001-05-31 0.544708 0.865880
2001-06-30 0.755516 0.863443
2001-07-31 0.266727 0.107859
2001-08-31 0.683754 0.098337
2001-09-30 0.586217 0.697163
2001-10-31 0.742394 0.160754
2001-11-30 0.655662 0.400128
2001-12-31 0.902192 0.580582
2002-01-31 0.878815 0.555669
换句话说,我喜欢按月份对df
进行分组,分组后的df
在df
中具有每个月最后几天的索引标签,但不是每个***日历***月的最后日期。
3条答案
按热度按时间6g8kf2rb1#
@BENY的回答对这个问题很好。但是,如果你需要对这个组做更多的事情(例如,计算一些聚合统计数据),那么这里有另一个使用
groupby
方法的想法:lztngnrs2#
让我们在修剪索引后尝试使用
duplicated
2uluyalo3#
用@nick的精彩回答来回答我的问题: