gpt4 book ai didi

python Pandas : update dataframe values from another dataframe

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:29 24 4
gpt4 key购买 nike

我有这两个数据框:(更新:我添加了一列 stuffdf1 以指定这两个数据框没有相同的模式)

df1 = pd.DataFrame({'id': ['1','2','3'], 
'val': [0, 0, 0],
'stuff': ['foo', 'bar', 'spam']})
df2 = pd.DataFrame({'id': ['2','3'], 'val': [10, 20]})

print(df1)
id val stuff
0 1 0 foo
1 2 0 bar
2 3 0 spam

print(df2)
id val
0 2 10
1 3 20

我想用 df2 val 列中的值更新 df1 val 列中的值id 列。 df1 转换后的期望结果:

print(df1)
id val stuff
0 1 0 foo
1 2 10 bar
2 3 20 spam

我可以使用连接 (merge),但是我需要更多的步骤才能得到预期的结果(将列从 float 转换为 int,删除列等)。 (顺便说一句,如果你有一个简单而优雅的连接方式,我也很感兴趣)。
我正在尝试使用切片方法,但不知道如何使用。示例:

>>> df1.loc[df1['id'].isin(df2['id']), 'val'] = df2['val']

给出:

print(df1)
id val stuff
0 1 0.0 foo
1 2 20.0 bar
2 3 NaN spam

更新: 多一个约束:不要修改原来的 df1索引。

最佳答案

你也可以做 map

In [88]: df1['id'].map(df2.set_index('id')['val']).fillna(df1['val'])
Out[88]:
0 0.0
1 10.0
2 20.0
Name: id, dtype: float64

In [89]: df1['val'] = df1['id'].map(df2.set_index('id')['val']).fillna(df1['val'])

In [90]: df1
Out[90]:
id val
0 1 0.0
1 2 10.0
2 3 20.0

关于 python Pandas : update dataframe values from another dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com