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