You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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
解决方案

可以通过拆分数据、重命名列、横向拼接的方式实现,步骤如下:

  1. 拆分出女性(F)和男性(M)的数据集,同时重置索引保证顺序对齐:
df_f = df[df['Gender'] == 'F'].reset_index(drop=True)
df_m = df[df['Gender'] == 'M'].reset_index(drop=True)
  1. 给男性数据集的列名添加后缀1,避免拼接时列名冲突:
df_m.columns = [col + '1' for col in df_m.columns]
  1. 横向拼接两个数据集,得到最终结果:
result = pd.concat([df_f, df_m], axis=1)
print(result)

注意事项

该方法的前提是女性和男性数据的行数完全一致,且原始数据中F和M的行是按顺序一一对应的。如果数据顺序不匹配,需要先通过业务逻辑对齐数据(比如按年份、姓名等字段关联)后再执行拼接操作。

内容的提问来源于stack exchange,提问作者Yuvaraj V C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:05:17