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

如何在Python Pandas中提取含Name列值的对应Comment列内容

提取Pandas DataFrame中含对应Name的Comment内容

问题场景

现有一个包含Name、Status和若干Comment1至CommentN列的DataFrame,示例结构如下:

NameStatusComment1Comment2Comment3
AbbyValidAbby.aomCindy.bomLulu.com
BobValidEd.comDan.bomBob.aom
ChrisBlockedHerdon.aomChris.bomJudy.com

创建该DataFrame的代码:

import pandas as pd

comments = {
    'Name': ['Abby', 'Bob', 'Chris'],
    'Status': ['Valid', 'Valid', 'Blocked'],
    'Comment1': ['Abby.aom', 'Ed.com', 'Herdon.aom'],
    'Comment2': ['Cindy.bom', 'Dan.bom', 'Chris.bom'],
    'Comment3': ['Lulu.com', 'Bob.aom', 'Judy.com']
}
df = pd.DataFrame(comments)

需要提取每行中包含对应Name值的Comment列内容,最终得到仅含Name和Result的结果表。


实现方法

方法一:逐行遍历匹配(简单直观)

先筛选出所有Comment列,再逐行检查每个Comment列的内容是否包含当前行的Name值,找到匹配项后返回:

# 筛选所有以Comment开头的列
comment_cols = [col for col in df.columns if col.startswith('Comment')]

# 定义函数提取每行的匹配内容
def get_matching_comment(row):
    for col in comment_cols:
        if row['Name'] in row[col]:
            return row[col]
    return None  # 无匹配时返回None

# 生成结果表
result_df = df[['Name']].copy()
result_df['Result'] = df.apply(get_matching_comment, axis=1)

print(result_df)

方法二:重塑数据后匹配(适合大数据量)

如果数据量较大,apply效率偏低,可以用melt将Comment列转为行结构,再筛选匹配项:

# 筛选Comment列
comment_cols = [col for col in df.columns if col.startswith('Comment')]

# 重塑数据,把所有Comment列转为行
melted_df = df.melt(id_vars=['Name'], value_vars=comment_cols, value_name='Result')

# 筛选出Result包含对应Name的行
matched_df = melted_df[melted_df.apply(lambda x: x['Name'] in x['Result'], axis=1)]

# 去重,确保每个Name只保留一条结果
result_df = matched_df[['Name', 'Result']].drop_duplicates(subset='Name')

print(result_df)

最终结果

两种方法都会得到如下结果:

NameResult
AbbyAbby.aom
BobBob.aom
ChrisChris.bom

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:22