如何使用Pandas实现指定结构的DataFrame透视转换?
Pandas透视后去除多层列结构实现目标宽格式
步骤1:预处理数据(若需衍生字段)
如果目标结构里的value是通过credit和debit计算得到的(比如value = credit - debit),先在原始DataFrame中新增该字段:
import pandas as pd # 假设原始DataFrame名为df df['value'] = df['credit'] - df['debit']
步骤2:执行透视聚合
使用pivot_table完成透视,指定行索引、列字段、需要聚合的数值字段和聚合方式:
# 根据你的实际行索引字段替换'account',比如科目编码、客户ID等 pivoted_df = df.pivot_table( index='account', columns='period', values=['value', 'transaction', 'balance'], aggfunc='sum' # 聚合方式按需调整,比如'mean'、'count'等 )
步骤3:合并多层列索引
透视后出现的多层列(上层是字段名、下层是季度Q1/Q2等),通过map和join合并成单一列名:
# 用下划线连接两层列名,生成如'value_Q1'、'transaction_Q2'的格式 pivoted_df.columns = pivoted_df.columns.map('_'.join)
步骤4:重置索引(可选)
如果需要把行索引(比如account)转为普通列,执行重置索引:
pivoted_df = pivoted_df.reset_index()
示例效果
原始数据示例:
| account | period | debit | credit | transaction | balance |
|---|---|---|---|---|---|
| A1 | Q1 | 100 | 200 | 5 | 1500 |
| A1 | Q2 | 150 | 300 | 3 | 1650 |
| A2 | Q1 | 50 | 100 | 2 | 800 |
处理后得到的目标宽格式:
| account | value_Q1 | value_Q2 | transaction_Q1 | transaction_Q2 | balance_Q1 | balance_Q2 |
|---|---|---|---|---|---|---|
| A1 | 100 | 150 | 5 | 3 | 1500 | 1650 |
| A2 | 50 | NaN | 2 | NaN | 800 | NaN |
内容的提问来源于stack exchange,提问作者hhk
相关产品推荐
相关产品推荐

