Pandas实现GroupBy子级转列:按ID、CD分组后重塑数据
Pandas分组求和结果转宽表实现方案
嘿,这个需求用Pandas的unstack()方法就能轻松搞定,完全匹配你想要的宽表展示格式!
实现步骤说明
你已经通过gp1.groupby(by=['ID', 'CD'])['BALANCE_AM'].sum()得到了一个带**多层索引(ID+CD)**的Series结果,要把CD类型转为独立列,只需要对这个结果执行unstack()操作即可:
具体代码
# 先执行分组求和得到多层索引的Series sum_result = gp1.groupby(by=['ID', 'CD'])['BALANCE_AM'].sum() # 将内层索引(CD)转为列,得到目标宽表 result_df = sum_result.unstack(level='CD')
执行后得到的result_df就是你期望的格式:
| ID | 5 | 58 | 123 | 47 |
|---|---|---|---|---|
| 4332 | 0.0 | 0.0 | 22656.0 | NaN |
| 756423 | NaN | NaN | 227655.0 | 645087.0 |
可选优化:替换缺失值
如果希望把表中的NaN替换为0(比如表示该ID没有对应CD类型的余额),可以在unstack()后加上fillna(0):
result_df = sum_result.unstack(level='CD').fillna(0)
这样输出的缺失值就会变成0,更符合部分场景的展示需求。
内容的提问来源于stack exchange,提问作者Sasi
相关产品推荐
相关产品推荐

