如何在Python Pandas中将分组值转置为列?(附数据示例)
Pandas 长表转宽表实现方法
你可以用Pandas的pivot()方法直接实现这个转换,步骤如下:
1. 准备示例数据
先还原你的原始DataFrame:
import pandas as pd data = { 'ID': [22, 22, 22, 33, 33, 44, 44], 'Product': ['product1', 'product2', 'product3', 'product2', 'product3', 'product1', 'product4'], 'Amount': ['$10', '$20', '$30', '$4', '$5', '$78', '$90'] } df = pd.DataFrame(data)
2. 使用pivot()转换格式
直接调用pivot(),指定索引、列值和填充值:
pivoted_df = df.pivot(index='ID', columns='Product', values='Amount').reset_index() # 移除默认的列层级名称 pivoted_df.columns.name = None
执行后得到的结果接近目标格式:
ID product1 product2 product3 product4 0 22 $10 $20 $30 NaN 1 33 NaN $4 $5 NaN 2 44 $78 NaN NaN $90
如果需要把空值NaN替换为空字符串,匹配你想要的输出样式,再加一步:
pivoted_df = pivoted_df.fillna('')
最终结果:
ID product1 product2 product3 product4 0 22 $10 $20 $30 1 33 $4 $5 2 44 $78 $90
特殊情况处理
如果你的数据中存在同一个ID+Product的重复行,pivot()会报错,这时可以改用pivot_table()并指定聚合方式(比如取第一个值):
pivoted_df = df.pivot_table(index='ID', columns='Product', values='Amount', aggfunc='first').reset_index() pivoted_df.columns.name = None pivoted_df = pivoted_df.fillna('')
内容的提问来源于stack exchange,提问作者AB SEA
相关产品推荐
相关产品推荐

