如何用Pandas将同键多行数据合并为单行并添加对应列
解决方法
可以通过分组编号+宽表转换的方式实现,以下是具体步骤(基于pandas):
- 构造示例数据(或读取你的原始DataFrame)
import pandas as pd df = pd.DataFrame({ 'key': ['A', 'A', 'A', 'B', 'B', 'B'], 'variable1': ['x', 'x', 'x', 'x', 'x', 'x'], 'variable2': [5, 6, 6, 5, 6, 6], 'variable3': ['s', 't', 't', 's', 't', 't'] })
- 为每个
key组内的行添加序号
# 每组内从0开始编号,区分同一key下的不同行 df['row_num'] = df.groupby('key').cumcount()
- 转换为宽表结构
# 将key和row_num设为索引,再展开列 wide_df = df.set_index(['key', 'row_num']).unstack()
- 重命名列名以匹配目标格式
# 重新生成列名:variable1→variable1/4/7,variable2→variable2/5/8,variable3→variable3/6/9 new_cols = [] for base_var in wide_df.columns.get_level_values(0).unique(): var_idx = int(base_var.split('variable')[1]) for row_idx in wide_df.columns.get_level_values(1).unique(): new_cols.append(f'variable{var_idx + row_idx * 3}') wide_df.columns = new_cols
- 重置索引得到最终结果
wide_df = wide_df.reset_index()
执行后wide_df的结构完全符合需求:
key variable1 variable2 variable3 variable4 variable5 variable6 variable7 variable8 variable9 0 A x 5 s x 6 t x 6 t 1 B x 5 s x 6 t x 6 t
内容的提问来源于stack exchange,提问作者FG85
相关产品推荐
相关产品推荐

