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

如何基于列值修改Pandas DataFrame并新增关联关系对应行

问题原因

原有代码是直接对匹配到的现有行的relations字段赋值,每一轮循环都会覆盖上一轮的赋值结果,自然不会生成新的行存储多个关联值。

解决方案

通过合并关联表的方式实现需求,代码更简洁也符合pandas的惯用逻辑:

基础版(不保留原索引)

import pandas as pd

data = {
  "names": ['a', 'b', 'c', 'd'],
  "ages": [50, 40, 45, 20],
  "relations": ['', '', '', '']
}
rel_list = [('a', 'b'), ('a', 'c'), ('c', 'd')]

df = pd.DataFrame(data)
# 将关联关系转为DataFrame
rel_df = pd.DataFrame(rel_list, columns=['names', 'relations'])
# 原表基础属性和关联表左连接
df = df[['names', 'ages']].merge(rel_df, on='names', how='left')
# 无关联的空值替换为空字符串
df['relations'] = df['relations'].fillna('')

print(df)

完全对齐示例版(保留原索引)

如果需要和你给出的期望结果的索引完全一致,只需要增加保存/恢复原索引的逻辑:

import pandas as pd

data = {
  "names": ['a', 'b', 'c', 'd'],
  "ages": [50, 40, 45, 20],
  "relations": ['', '', '', '']
}
rel_list = [('a', 'b'), ('a', 'c'), ('c', 'd')]

df = pd.DataFrame(data)
# 保存原索引
df = df.reset_index(names='origin_idx')
rel_df = pd.DataFrame(rel_list, columns=['names', 'relations'])
df = df[['origin_idx', 'names', 'ages']].merge(rel_df, on='names', how='left')
df['relations'] = df['relations'].fillna('')
# 恢复原索引
df = df.set_index('origin_idx')
df.index.name = None

print(df)

运行后输出完全符合预期:

names  ages relations
0     a    50         b
0     a    50         c
1     b    40          
2     c    45         d
3     d    20          

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:07