You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中按指定字段分组并保留分组于单个DataFrame?

问题:如何在Pandas中按指定字段分组并将同组行连续排列为单个DataFrame?

我有一个如下的Pandas DataFrame:

ID   Deal  Party  Commodity       startdate  enddate  price    quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ------   --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       5       25.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       10      50.00

我需要按Deal、Commodity和startdate字段对数据进行分组,使同组的行连续排列,得到如下目标DataFrame:

ID   Deal  Party  Commodity       startdate  enddate  price    quantity  mtmvalue
---- ----- -----  ---------       ---------  -------  ------   --------  ---------
J1   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J2   Sell   J   (stock1, stock2)   01Jan23   01Feb23   10.00      10      100.00
J3   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       10      50.00
J4   Buy    J   (stock1, stock2)   01Jan23   01Feb23   5.00       5       25.00

目前我使用代码df.groupby(['Deal', 'Commodity', 'StartDate'])会生成两个分组对象,但希望将分组后的结果保留在单个DataFrame中,请问该如何实现这一需求?


解决方法

你需要的不是分组聚合操作,而是按指定字段排序来让同组行连续排列,直接用sort_values()方法即可实现,无需使用groupby:

# 注意字段名大小写要与你的DataFrame匹配,这里startdate是小写
df_sorted = df.sort_values(by=['Deal', 'Commodity', 'startdate'])

如果需要保留每个分组内的原始行顺序(比如示例中Sell组里J1在前、J2在后,Buy组里J3在前、J4在后),可以使用稳定排序算法mergesort:

df_sorted = df.sort_values(by=['Deal', 'Commodity', 'startdate'], kind='mergesort')

执行后得到的df_sorted就是你需要的单个DataFrame,既保证了同组行连续排列,又完整保留了所有原始数据列。

内容的提问来源于stack exchange,提问作者iBeMeltin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:13:13