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

如何用Pandas实现按列拆分多行的透视表格式?

解决Pandas账务数据拆分需求

你不需要手动处理字典,直接用Pandas就能实现这个拆分效果,核心思路是保留原始数据的行结构,将每个direction对应的amount映射到对应列,非对应列留空,具体两种实现方法:

方法一:逐行判断映射(直观易读)

import pandas as pd

data = [
    {"Account": "Cash", "amount": 10, "direction": "debit"},
    {"Account": "Cash", "amount": 10, "direction": "credit"}
]

df = pd.DataFrame(data)

# 生成credit和debit列,仅对应方向填充金额,其余为缺失值
result = df.assign(
    credit=df.apply(lambda row: row['amount'] if row['direction'] == 'credit' else pd.NA, axis=1),
    debit=df.apply(lambda row: row['amount'] if row['direction'] == 'debit' else pd.NA, axis=1)
).drop(columns=['amount', 'direction']).set_index('Account')

print(result)

输出结果:

credit  debit
Account                
Cash        <NA>     10
Cash          10  <NA>

方法二:独热编码+乘法(高效适合大数据)

如果数据量较大,用get_dummies结合向量运算效率更高:

import pandas as pd

data = [
    {"Account": "Cash", "amount": 10, "direction": "debit"},
    {"Account": "Cash", "amount": 10, "direction": "credit"}
]

df = pd.DataFrame(data)

# 对direction生成独热编码,再与amount相乘得到对应列的值
direction_dummies = pd.get_dummies(df['direction'], dtype=float)
result = df[['Account']].join(direction_dummies.mul(df['amount'], axis=0)).set_index('Account')

print(result)

输出结果和方法一一致,缺失值显示为NaN(可根据需求用fillna('')替换为空字符串)。

为什么不用pivot?

pivot()会对相同index(这里是Account)的行做聚合,把多个行合并成一行,而你的需求是保留原始的行拆分结构,所以需要用上述方法来保留每行的独立性,只填充对应方向的金额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:04