如何按行交替合并Pandas DataFrame中的成对列
按交替顺序生成目标DataFrame的解决方案
问题背景
现有如下Pandas DataFrame:
import pandas as pd import numpy as np # 后续方案需用到 df = pd.DataFrame({'home_id': ['1', '3', '5', '7'], 'home_name': ['A', 'C', 'E', 'G'], 'away_id': ['2', '4', '6', '8'], 'away_name': ['B', 'D', 'F', 'H']})
需要生成按第一行home列→第一行away列→第二行home列→第二行away列交替顺序的目标结构:
id name 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H
此前用pd.concat合并后按索引排序的方法,在存在重复索引时易出错,因此需要更可靠的交替取值方案。
高效解决方案:利用numpy数组重塑
直接通过numpy的数组拼接与重塑操作,无需依赖索引排序,完美实现交替顺序:
# 将每行的home数据与away数据横向配对,再重塑为2列结构 data = np.column_stack([df[['home_id', 'home_name']].values, df[['away_id', 'away_name']].values]).reshape(-1, 2) # 转换为目标DataFrame result_df = pd.DataFrame(data, columns=['id', 'name'])
方案说明
np.column_stack将每行的(home_id, home_name)和(away_id, away_name)横向拼接,得到形状为(4,4)的数组(4行,每行包含home_id、home_name、away_id、away_name)reshape(-1,2)将数组自动展平并重塑为2列结构,最终得到8行2列的数组,正好对应home→away的交替顺序- 最后将数组转为DataFrame并指定列名即可
验证结果
运行上述代码后,result_df的输出完全符合目标结构:
id name 0 1 A 1 2 B 2 3 C 3 4 D 4 5 E 5 6 F 6 7 G 7 8 H
内容的提问来源于stack exchange,提问作者Digital Farmer
相关产品推荐
相关产品推荐

