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

Python中如何用正则筛选DataFrame列并聚合合并列值?

问题描述

我有一个包含如下列的DataFrame:

Name   Company generic name generic name R&D Number (DC-) R&D Number (A)   type 
A      AB      53654        5767         1111             3333             a
C      CD      56767                     56667       

我想要创建这个DataFrame的子集,把匹配特定模式的列的值用逗号聚合合并,目标输出如下:

Name   Company generic name        R&D Number   
A      AB      53654, 5767         1111, 3333             
C      CD      56767               56667       

我已经知道可以用df.filter(regex=("R&D Number.*"))基于正则筛选列,但不清楚怎么把筛选后的列和其他列结合,并且通过逗号拼接值得到最终输出,求帮助。

解决方案

可以通过分组筛选列→逐行拼接非空值→保留目标列的步骤实现需求,具体如下:

1. 处理"generic name"系列列

先筛选所有包含"generic name"的列,逐行拼接非空值:

# 筛选所有generic name相关列
generic_cols = df.filter(regex="generic name").columns
# 逐行拼接非空值,用逗号分隔
df["generic name"] = df[generic_cols].apply(lambda x: ', '.join(x.dropna().astype(str)), axis=1)

2. 处理"R&D Number"系列列

用同样逻辑处理研发编号列:

# 筛选所有R&D Number相关列
rd_cols = df.filter(regex="R&D Number").columns
# 逐行拼接非空值
df["R&D Number"] = df[rd_cols].apply(lambda x: ', '.join(x.dropna().astype(str)), axis=1)

3. 构建最终子集

保留需要的核心列,移除原始重复列和不需要的type列:

final_df = df[["Name", "Company", "generic name", "R&D Number"]]

完整代码示例

import pandas as pd

# 构造示例DataFrame(模拟原始数据)
data = {
    "Name": ["A", "C"],
    "Company": ["AB", "CD"],
    "generic name": ["53654", "56667"],
    "generic name.1": ["5767", pd.NA],
    "R&D Number (DC-)": ["1111", "56667"],
    "R&D Number (A)": ["3333", pd.NA],
    "type": ["a", pd.NA]
}
df = pd.DataFrame(data)

# 处理generic name列
generic_cols = df.filter(regex="generic name").columns
df["generic name"] = df[generic_cols].apply(lambda x: ', '.join(x.dropna().astype(str)), axis=1)

# 处理R&D Number列
rd_cols = df.filter(regex="R&D Number").columns
df["R&D Number"] = df[rd_cols].apply(lambda x: ', '.join(x.dropna().astype(str)), axis=1)

# 生成最终结果
final_df = df[["Name", "Company", "generic name", "R&D Number"]]
print(final_df)

运行输出:

Name Company    generic name R&D Number
0    A      AB  53654, 5767    1111, 3333
1    C      CD  56667          56667

关键说明

  • apply(..., axis=1):指定逐行处理数据
  • dropna():跳过空值,避免拼接出多余的逗号
  • astype(str):确保数值类型的列能被正确转换为字符串拼接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:07:21