我正在处理一个数据框,其中包含像这样跨多年的时间跨度记录的每日值

   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

10-04 15:57