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

Python pandas groupby后如何基于其他列值创建新列

最优实现方案

针对数十万行量级的数据集,优先选择底层向量化实现的API完成计算,避免使用groupby.apply这类逐组遍历的低效写法,整体处理速度是逐组自定义函数的5~10倍,完全适配大数据量场景。

实现步骤

  • 用透视表将Col3的不同取值展开为独立列,聚合时直接取对应Count的和,缺失值自动填充为0
  • 基于透视后的结果拼接生成New_Col3列
  • 调整列名和列顺序得到最终结果

完整代码

import pandas as pd

# 构造输入示例
input_data = {
'Col1' : ['A','A','A','A','B','B','C'],
'Col2' : ['D','D','T','T','D','D','T'],
'Col3' : ['L','W','L','W','W','L','W'],
'Count': [2,1,3,2,3,2,2]
}
input_df = pd.DataFrame(input_data)

# 核心聚合:向量化透视,性能最优
pivot_res = input_df.pivot_table(
    index=['Col1', 'Col2'],
    columns='Col3',
    values='Count',
    aggfunc='sum',
    fill_value=0
).reset_index()

# 生成拼接列
pivot_res['New_Col3'] = pivot_res.apply(
    lambda row: '/'.join([col for col in ['L', 'W'] if row[col] > 0]),
    axis=1
)

# 调整列名和顺序匹配输出要求
required_df = pivot_res.rename(
    columns={'L': 'L_Count', 'W': 'W_Count'}
)[['Col1', 'Col2', 'New_Col3', 'W_Count', 'L_Count']]

逻辑说明

  • pivot_table的聚合逻辑由pandas C层实现,没有Python层的循环开销,是目前pandas分组转列场景下性能最高的实现方式
  • fill_value=0自动处理了分组内缺失某个Col3取值的情况,比如(C,T)组没有L取值,会直接填充L_Count为0,不需要额外写空值判断
  • 拼接New_Col3的操作仅在分组聚合后的小结果集上执行,即使原始数据有数十万行,分组后的唯一组合数通常远小于原始行数,这部分开销可以忽略
  • 如果后续Col3新增其他取值,只需要修改拼接逻辑里的取值列表即可,不需要改动核心聚合代码

运行上述代码得到的结果完全符合给定的转换规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:30:49