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

按条件将DataFrame行内容拼接至另一DataFrame对应单元格的实现需求

解决方案

步骤1:预处理df2,拼接每个姓名对应的Kids

先对df2按Name分组,将每组的Kids拼接成指定分隔符的字符串,生成姓名与拼接后文本的映射关系:

import pandas as pd

# 初始化原始数据
data = {'Name': ['Tom', 'nick', 'krish', 'jack'],
        'Age': [20, 21, 19, 18],
        'nickname': ['T', 'N', 'K','J']}
df1 = pd.DataFrame(data)

data2 = {'Kids': ['child1', 'child2', 'child3', 'child4', 'child1', 'child2', 'child3', 'child4'],
        'Name': ['Tom', 'Tom', 'Tom', 'Tom', 'nick', 'nick', 'nick', 'nick'],
        'nickname': ['T', 'T', 'T', 'T', 'N', 'N', 'N', 'N']}
df2 = pd.DataFrame(data2)

# 分组拼接Kids,这里用逗号分隔,可按需替换其他分隔符
kids_mapping = df2.groupby('Name')['Kids'].apply(lambda x: ','.join(x)).to_dict()

步骤2:替换df1的Name列,支持按行索引跳过

定义需要跳过的行索引列表,仅对非跳过的行执行姓名替换:

# 指定要跳过的行索引(示例:跳过索引2、3,对应krish和jack)
skip_indices = [2, 3]

# 遍历df1执行替换
for idx, row in df1.iterrows():
    if idx not in skip_indices:
        # 若df1中的姓名在df2无匹配,保留原姓名避免报错
        df1.loc[idx, 'Name'] = kids_mapping.get(row['Name'], row['Name'])

# 查看最终结果
print(df1)

执行后输出结果:

Name  Age nickname
0  child1,child2,child3,child4   20        T
1  child1,child2,child3,child4   21        N
2                        krish   19        K
3                         jack   18        J

补充说明

  • 分隔符可自定义:将','.join(x)替换为';'.join(x)或其他符号即可
  • 容错处理:kids_mapping.get()方法确保df1中无匹配的姓名不会被修改,避免KeyError
  • 跳过逻辑灵活:修改skip_indices列表即可调整需要保留原姓名的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:15:08