合并相似DataFrame行:如何将同一用户多行转为宽格式
实现长格式DataFrame转指定宽格式的方法
当然可以!用pandas就能轻松搞定这个长表转宽表的需求,我给你一步步演示具体操作:
1. 构造示例数据
首先我们先还原你提供的原始DataFrame:
import pandas as pd # 你的原始长格式DataFrame df = pd.DataFrame({ 'User': ['John', 'John'], 'Date': ['DateA', 'DateB'], 'FeatureA': [1, 3], 'FeatureB': [2, 5] })
2. 添加组内序号
因为我们需要区分同一用户的不同行(第1条、第2条记录),所以给每个用户的记录添加一个从1开始的组内序号:
# 按User分组,给每组内的行分配序号(从1开始) df['idx'] = df.groupby('User').cumcount() + 1
3. 重塑为宽格式
接下来用pivot方法把数据转成宽格式,然后重命名列名来匹配你想要的格式:
# 以User为索引,idx为列,把其他列展开 wide_df = df.pivot(index='User', columns='idx').reset_index() # 把多级列名合并成"列名+序号"的格式(比如Date1、FeatureA1) wide_df.columns = [f'{col[0]}{col[1]}' if col[1] != '' else col[0] for col in wide_df.columns]
4. 查看结果
运行完上面的代码后,打印wide_df就能得到你想要的格式:
print(wide_df)
输出结果:
| User | Date1 | Date2 | FeatureA1 | FeatureA2 | FeatureB1 | FeatureB2 |
|---|---|---|---|---|---|---|
| John | DateA | DateB | 1 | 3 | 2 | 5 |
额外说明
如果你的数据里同一个用户有更多条记录(比如3条),这个方法也能自动适配,会生成Date3、FeatureA3这类列名,完全不用修改代码~
内容的提问来源于stack exchange,提问作者Derrick Peh
相关产品推荐
相关产品推荐

