如何重塑pandas DataFrame将指定列值转换为新的列字段?
pandas DataFrame 重塑最优实现方案
以下两种高效实现均可以得到预期输出:
方法1:groupby 直接聚合(代码最简,适合分组后长度完全一致的场景)
核心逻辑:按A列分组后提取每组B列值转为列表,再直接构造新DataFrame
import pandas as pd # 原始数据 df1 = pd.DataFrame({'A':['a','a','b','b'],'B':[1,2,2,3]}) # 转换代码 df2 = pd.DataFrame(df1.groupby('A')['B'].apply(list).to_dict())
方法2:pivot 透视(兼容性更强,支持分组后长度不一致的场景,缺失值自动补NaN)
核心逻辑:先给每个分组内的元素加行号,再通过透视表直接生成目标结构
import pandas as pd # 原始数据 df1 = pd.DataFrame({'A':['a','a','b','b'],'B':[1,2,2,3]}) # 转换代码 df1['group_idx'] = df1.groupby('A').cumcount() df2 = df1.pivot(index='group_idx', columns='A', values='B')\ .reset_index(drop=True)\ .rename_axis(None, axis=1)
优先选择建议:如果确认所有分组的元素数量完全一致,优先选方法1,代码更简洁执行效率更高;如果存在分组长度不一致的情况,选方法2兼容性更好。
两种方法执行后输出的df2均为预期结构:
| a | b |
|---|---|
| 1 | 2 |
| 2 | 3 |
内容的提问来源于stack exchange,提问作者Beertje
相关产品推荐
相关产品推荐

