如何使用 groupby() 按日和月对跨越多年的数据进行分组?

How to use groupby() to group data that spans many years by the day and month?

提问人:Bennett_Eleven 提问时间:11/12/2023 最后编辑:Adrian MaxwellBennett_Eleven 更新时间:11/12/2023 访问量:28

问:

我有一个跨越多年的数据集。一年中的每一天都有多个数据条目。我想按一年中的某一天分组。即日月,然后使用 agg() 找到最大值,这样我就剩下 365 行了。

我的方法是创建一个新列,该列采用格式为 yyyy-mm-dd 的索引,并剥离年份,使其变为 mm-dd,并在此列上使用 groupby。我知道这会奏效。

但是我已使用 pd.to_datetime(df.index) 将索引转换为日期时间对象。我想学习如何使用日期时间索引,我相信有一种方法可以使用 datetime 对象索引以一种干净的方式做到这一点。请告诉我一个干净的方法:)。谢谢

df.groupby([df.index.month, df.index.day]).agg({"Data_Value":np.max})

输出是多索引,我不希望这样

pandas DataFrame datetime 分组

评论


答:

0赞 Adrian Maxwell 11/12/2023 #1

使用日期信息,以便获得“mm-dd”值,然后按该值进行汇总:strftime

df.groupby(df.index.strftime('%m-%d')).agg({"Data_Value":np.max})
0赞 Parfait 11/12/2023 #2

由于您的数据是时间序列,因此请考虑 Data frame.resample

df[["Data_Value"]].resample("1D").max()