我正在处理一个数据框,其中包含像这样跨多年的时间跨度记录的每日值
Date Position Value
2010-01-01 PEAK 60
2010-01-01 BOTTOM 51
2010-01-02 PEAK 62
2010-01-02 BOTTOM 50
...
2011-01-01 PEAK 70
2011-01-01 BOTTOM 61
2011-01-02 PEAK 72
2011-01-02 BOTTOM 60
...
2015-12-31 PEAK 92
2015-12-31 BOTTOM 83
也就是说,不考虑to年(即2月29日),将与每个日历日期相对应的行条目连续重复6年,并且我想按日历日期对它们进行分组,而不考虑年份,例如以下格式
Date Position Value
2010-01-01 PEAK 60
2010-01-01 BOTTOM 51
2011-01-01 PEAK 63
2011-01-01 BOTTOM 57
...
2015-01-01 PEAK 84
2015-01-01 BOTTOM 71
...
2014-12-31 PEAK 85
2014-12-31 BOTTOM 79
2015-12-31 PEAK 92
2015-12-31 BOTTOM 83
哪种更好的方法可以进行groupby()操作,假设我想保留一些余地,以便对每个日历日期“ group”内的值进行一些简单的计算(例如,max(),min(),mean()) “?
我确实检查了所有以前的相关文章,但似乎在这里找不到适合我的目的。如果有人可以指出一种更好的方法,我将非常感激。
谢谢。
最佳答案
您有一个要解决的问题。一种方法是使用中间数据帧执行此操作:
df2 = pd.DataFrame([df.Date.dt.month, df.Date.dt.day]).T
df2.columns = [0,1]
df2
Out[32]:
0 1
0 1 1
1 1 1
2 1 2
3 1 2
4 1 1
5 1 1
6 1 2
7 1 2
8 12 31
9 12 31
df2 = df2.sort_values([0,1])
现在用我们现在在
df
中的结果索引重新索引df2
:df.reindex(df2.index)
Out[36]:
Date Position Value
0 2010-01-01 PEAK 60
1 2010-01-01 BOTTOM 51
4 2011-01-01 PEAK 70
5 2011-01-01 BOTTOM 61
2 2010-01-02 PEAK 62
3 2010-01-02 BOTTOM 50
6 2011-01-02 PEAK 72
7 2011-01-02 BOTTOM 60
8 2015-12-31 PEAK 92
9 2015-12-31 BOTTOM 83