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

如何对Pandas GroupBy输出的P_0与P_1维度值进行排序?

分组结果双维度排序解决方案

你的代码执行后,分组生成的结果中P_0(行)和P_1(列)维度未按数值排序,导致P_0最小值出现在最后一行。可以通过以下两种方式实现两个维度的排序:

方法一:分组前对源数据排序

先按目标字段对数据排序,再执行分组操作,保证分组后的索引和列天然有序:

param = bta.bt_get_used_param(all_trades_df)
for i in range(len(param)-1):
    # 按当前两个参数字段排序数据
    sorted_df = lrun_trade_df.sort_values(by=[param[i], param[i+1]])
    g = sorted_df.groupby([param[i], param[i+1]])['Profit'].sum().unstack(level=1) 
g

方法二:分组后对结果索引和列排序

直接对分组生成的DataFrame的行索引和列分别排序,无需修改源数据:

param = bta.bt_get_used_param(all_trades_df)
for i in range(len(param)-1):
    g = lrun_trade_df.groupby([param[i], param[i+1]])['Profit'].sum().unstack(level=1) 
    # 同时对行索引(P_0)和列(P_1)按数值排序
    g = g.sort_index(axis=0).sort_index(axis=1)
g

特殊情况处理

如果P_0和P_1是字符串格式的数字(如'8'、'10'),直接排序会按字典序执行(比如'10'会排在'8'前面),需要先转换为数值类型:

param = bta.bt_get_used_param(all_trades_df)
for i in range(len(param)-1):
    # 将参数字段转为整数类型
    lrun_trade_df[param[i]] = lrun_trade_df[param[i]].astype(int)
    lrun_trade_df[param[i+1]] = lrun_trade_df[param[i+1]].astype(int)
    # 再执行分组和排序
    g = lrun_trade_df.groupby([param[i], param[i+1]])['Profit'].sum().unstack(level=1) 
    g = g.sort_index(axis=0).sort_index(axis=1)
g

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:50:16