如何将DataFrame中按性别分组的两行合并为单行?
问题描述
现有如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame.from_dict( { 'Name': ['Jenny', 'Matt', 'Jenny', 'Matt', 'Jenny', 'Matt', 'Jenny', 'Matt'], 'Year': [2020, 2021, 2022, 2020, 2021, 2022, 2020, 2021], 'Income': [10000, 11000, 9000, 12000, 13000, 11000, 14000, 15000], 'Gender': ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M'] } ) print(df)
运行输出:
Name Year Income Gender 0 Jenny 2020 10000 F 1 Matt 2021 11000 M 2 Jenny 2022 9000 F 3 Matt 2020 12000 M 4 Jenny 2021 13000 F 5 Matt 2022 11000 M 6 Jenny 2020 14000 F 7 Matt 2021 15000 M
需求:按性别将两行合并为单行(把F和M行合并到同一行),允许增加列数,预期输出如下:
Name Year Income Gender Name1 Year1 Income1 Gender1 0 Jenny 2020 10000 F Matt 2021 11000 M 1 Jenny 2022 9000 F Matt 2020 12000 M 2 Jenny 2021 13000 F Matt 2022 11000 M 3 Jenny 2020 14000 F Matt 2021 15000 M
解决方案
可以通过拆分数据、重命名列、横向拼接的方式实现,步骤如下:
- 拆分出女性(F)和男性(M)的数据集,同时重置索引保证顺序对齐:
df_f = df[df['Gender'] == 'F'].reset_index(drop=True) df_m = df[df['Gender'] == 'M'].reset_index(drop=True)
- 给男性数据集的列名添加后缀
1,避免拼接时列名冲突:
df_m.columns = [col + '1' for col in df_m.columns]
- 横向拼接两个数据集,得到最终结果:
result = pd.concat([df_f, df_m], axis=1) print(result)
注意事项
该方法的前提是女性和男性数据的行数完全一致,且原始数据中F和M的行是按顺序一一对应的。如果数据顺序不匹配,需要先通过业务逻辑对齐数据(比如按年份、姓名等字段关联)后再执行拼接操作。
内容的提问来源于stack exchange,提问作者Yuvaraj V C
相关产品推荐
相关产品推荐

