如何用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
相关产品推荐
相关产品推荐

