如何在反转时序DataFrame后保持顺序执行groupby操作?
解决方案:保持反转时序数据的分组顺序
问题出在groupby默认会对分组键进行排序,导致结果回到原顺序。要在反转数据的状态下完成分组累加,只需在groupby时添加sort=False参数,阻止分组键自动排序即可。
修改后的代码
x = ts.loc[::-1, "column_1"].eq(0) # 添加sort=False,保留数据中分组的出现顺序 result = x.groupby(pd.Grouper(freq="M"), sort=False).cumsum().head(35)
原理说明
- 你原代码中,
pd.Grouper(freq="M")会提取每个日期对应的月份作为分组键,而groupby默认参数sort=True会把这些月份按键的升序(比如2000-01在前,2000-02在后)重新排列,所以结果看起来像是恢复了原数据顺序。 - 加上
sort=False后,分组会严格按照反转后数据中月份出现的先后顺序(也就是先2000-02,再2000-01)处理,同时每个组内的行顺序也保持反转后的状态,这样cumsum就是在反转后的组内数据上进行累加,最终结果的顺序也和反转后的数据集一致。
额外验证(可选)
如果想确认分组后的顺序,可以查看分组对象的groups属性:
groups = x.groupby(pd.Grouper(freq="M"), sort=False).groups print(groups.keys()) # 输出顺序会是2000-02, 2000-01,和反转后数据的月份出现顺序一致
内容的提问来源于stack exchange,提问作者Bella_18
相关产品推荐
相关产品推荐

