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

如何基于另一个DataFrame修改现有DataFrame并生成新DataFrame?

可行,以下是两种实现方法

方法一:遍历更新(适合小数据集)

先修正df_2的列名(第三列实际是对应修改列的新值,不是Age),然后遍历df_2的每一行,精准替换df_1中对应Name和对应列的值:

import pandas as pd

# 初始化原始DataFrame
data_1 = [['Michael', 40, 'Brown', 1], ['Dwight', 38, 'Brown', 2], ['Jim', 36, 'Blonde', 3]]
df_1 = pd.DataFrame(data_1, columns=['Name', 'Age', 'Hair Color', 'IQ'])

data_2 = [['Michael', 'Age', 42], ['Dwight', 'Hair Color', 'Red'], ['Jim', 'IQ', 135]]
df_2 = pd.DataFrame(data_2, columns=['Name', 'Change', 'New_Value'])  # 重命名第三列,避免歧义

# 遍历df_2执行替换
for _, row in df_2.iterrows():
    df_1.loc[df_1['Name'] == row['Name'], row['Change']] = row['New_Value']

print(df_1)

运行结果:

Name  Age Hair Color   IQ
0  Michael   42      Brown    1
1   Dwight   38        Red    2
2      Jim   36     Blonde  135

方法二:透视表合并更新(适合大数据集)

通过将df_2转成宽表,再与df_1合并并更新,避免循环,效率更高:

import pandas as pd

# 初始化原始DataFrame
data_1 = [['Michael', 40, 'Brown', 1], ['Dwight', 38, 'Brown', 2], ['Jim', 36, 'Blonde', 3]]
df_1 = pd.DataFrame(data_1, columns=['Name', 'Age', 'Hair Color', 'IQ'])

data_2 = [['Michael', 'Age', 42], ['Dwight', 'Hair Color', 'Red'], ['Jim', 'IQ', 135]]
df_2 = pd.DataFrame(data_2, columns=['Name', 'Change', 'New_Value'])

# 将df_2转成宽表,行是Name,列是要修改的字段,值是新值
df_2_pivot = df_2.pivot(index='Name', columns='Change', values='New_Value').reset_index()

# 合并并更新df_1,用df_2的新值覆盖df_1的旧值
df_updated = df_1.set_index('Name').combine_first(df_2_pivot.set_index('Name')).reset_index()

# 修正数据类型(合并后部分字段可能转为float)
df_updated[['Age', 'IQ']] = df_updated[['Age', 'IQ']].astype(int)

print(df_updated)

运行结果和方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:13