在R语言中如何将重复行转为同一键值下的附加列?
将同一键值的重复行转为附加列(以汽车名称为例)
示例输入数据
假设你的原始DataFrame结构如下:
import pandas as pd df = pd.DataFrame({ '汽车名称': ['特斯拉Model 3', '特斯拉Model 3', '丰田卡罗拉', '丰田卡罗拉', '丰田卡罗拉'], '属性': ['续航', '加速', '油耗', '空间', '可靠性'], '数值': ['550km', '3.3s', '4.2L/100km', '4.8m³', '5星'] })
解决方案
通过分组编号+透视的方式,将同一汽车名称对应的多行转为同一行的附加列:
# 1. 为每个汽车的重复行分配序号,区分同组内的不同行 df['行序号'] = df.groupby('汽车名称').cumcount() + 1 # 2. 透视转换,把同组的行转为横向列 pivoted_df = df.pivot(index='汽车名称', columns='行序号') # 3. 扁平化多层列名,让结果更易读 pivoted_df.columns = [f'{col[0]}_{col[1]}' for col in pivoted_df.columns] # 4. 重置索引,将汽车名称从索引转回普通列 final_df = pivoted_df.reset_index()
输出效果
执行后得到的final_df结构如下:
| 汽车名称 | 属性_1 | 数值_1 | 属性_2 | 数值_2 | 属性_3 | 数值_3 |
|---|---|---|---|---|---|---|
| 特斯拉Model 3 | 续航 | 550km | 加速 | 3.3s | NaN | NaN |
| 丰田卡罗拉 | 油耗 | 4.2L/100km | 空间 | 4.8m³ | 可靠性 | 5星 |
逻辑说明
cumcount():为每个分组(汽车名称)内的行生成从0开始的序号,+1后让序号从1开始,更符合日常习惯。pivot():以汽车名称为索引,行序号为列,将原表的列转为多层列结构。- 列名扁平化:把多层列(如
('属性', 1))转为属性_1的格式,避免多层列带来的操作不便。
这个方法适用于任意数量的列和任意重复次数的分组,能完美实现你需要的“将重复行转为附加列”的效果。
内容的提问来源于stack exchange,提问作者benB
相关产品推荐
相关产品推荐

