Python 在特定列中更新

Python 在特定列中更新,python,pandas,merge,Python,Pandas,Merge,我想根据另一个数据帧中的值更新一个数据帧中的值,但我想指定更新的列(即,哪个列应该是查找匹配行的“键”)。现在,它似乎确实将第一列视为关键列。有没有办法给它传递一个特定的列名 例如: import pandas as pd import numpy as np df_a = pd.DataFrame() df_a['x'] = range(5) df_a['y'] = range(4, -1, -1) df_a['z'] = np.random.rand(5) df_b = pd.DataF

我想根据另一个数据帧中的值更新一个数据帧中的值,但我想指定更新的列(即,哪个列应该是查找匹配行的“键”)。现在,它似乎确实将第一列视为关键列。有没有办法给它传递一个特定的列名

例如:

import pandas as pd
import numpy as np

df_a = pd.DataFrame()
df_a['x'] = range(5)
df_a['y'] = range(4, -1, -1)
df_a['z'] = np.random.rand(5)

df_b = pd.DataFrame()
df_b['x'] = range(5)
df_b['y'] = range(5)
df_b['z'] = range(5)


print('df_b:')
print(df_b.head())
print('\nold df_a:')
print(df_a.head(10))

df_a.update(df_b)

print('\nnew df_a:')
print(df_a.head())
输出:

你看,根据
df_a
df_b
之间的
x
匹配,它在
df_a
中用
df_b
中的相应列替换了
y
z

如果我想保持
y
不变怎么办?如果我希望它基于
y
而不是
x
进行替换,该怎么办。另外,如果有多个列需要替换(在实际问题中,我必须用新的数据集更新数据集,其中两列或三列中的值与第四列中的值相匹配),该怎么办

基本上,我希望执行某种合并替换操作,在该操作中,我指定在上合并/替换哪些列,以及应该替换哪些列


希望这能让事情更清楚。如果这不能通过
pandas
中的
update
来实现,我想知道是否还有其他方法(除了为
循环编写一个单独的函数)。

这是我目前的解决方案,但似乎有点不雅观:

df_merge = df_a.merge(df_b, on='y', how='left', suffixes=('_a', '_b'))
print(df_merge.head())

df_merge['x'] = df_merge.x_b
df_merge['z'] = df_merge.z_b

df_update = df_a.copy()
df_update.update(df_merge)
print(df_update)
输出:


拜托,伙计,如果一个不知道你在做什么的人看到这个,你认为他们会有足够的信息来提供帮助吗?添加了示例代码和输出。
df_merge = df_a.merge(df_b, on='y', how='left', suffixes=('_a', '_b'))
print(df_merge.head())

df_merge['x'] = df_merge.x_b
df_merge['z'] = df_merge.z_b

df_update = df_a.copy()
df_update.update(df_merge)
print(df_update)
   x_a  y       z_a  x_b  z_b
0    0  0  0.505949    0    0
1    1  1  0.231265    1    1
2    2  2  0.241109    2    2
3    3  3  0.579765  NaN  NaN
4    4  4  0.172409  NaN  NaN
   x  y         z
0  0  0  0.000000
1  1  1  1.000000
2  2  2  2.000000
3  3  3  0.579765
4  4  4  0.172409
5  5  5  0.893562
6  6  6  0.638034
7  7  7  0.940911
8  8  8  0.998453
9  9  9  0.965866