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

如何在Pandas DataFrame中按C2/C3非空分组合并C4列多行内容?

解决方法

可以通过分组标识+聚合的方式高效实现需求,步骤如下:

1. 构造测试数据

先将示例数据转换为Pandas DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'C1': [2021, 2021, 2021, 2021, 2021],
    'C2': [4, np.nan, np.nan, 5, np.nan],
    'C3': ['1X', np.nan, np.nan, '1Y', np.nan],
    'C4': ['"First text "', '"continued"', '"still Continued"', '"second text"', '"continued"']
})

2. 创建分组标识

通过判断C2和C3是否同时非空,生成分组编号,后续属于同一组的行会被归为同一个编号:

# 当C2和C3都不为空时标记为新分组起点,累计求和得到分组ID
df['group_id'] = df[['C2', 'C3']].notna().all(axis=1).cumsum()

3. 分组聚合合并

对每个分组,提取C1/C2/C3的首个非空值,同时合并C4的所有文本(先去掉引号、清理多余空格):

result = df.groupby('group_id').agg(
    C1=('C1', 'first'),
    C2=('C2', 'first'),
    C3=('C3', 'first'),
    C4=('C4', lambda x: ' '.join([s.strip('"').strip() for s in x]))
).reset_index(drop=True)

执行后得到的result就是目标结果:

C1   C2  C3                                           C4
0  2021  4.0  1X  First text continued still Continued
1  2021  5.0  1Y               second text continued

关键说明

  • 分组逻辑:只有当C2和C3同时非空时才开启新分组,确保后续空值行都归属于上一个有效组。
  • 文本处理:通过strip('"').strip()去掉引号和首尾空格,再用join合并,避免出现多余空格。

内容的提问来源于stack exchange,提问作者user3503711

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 13:54:23