【发布时间】:2016-03-26 11:41:49
【问题描述】:
我想根据另一个数据帧中的值更新一个pandas 数据帧中的值,但我想指定要更新的列(即,哪一列应该是查找匹配行的“键”) .现在它似乎确实将第一列视为关键。有没有办法给它传递一个特定的列名?
例子:
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_b:
x y z
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
old df_a:
x y z
0 0 4 0.333648
1 1 3 0.683656
2 2 2 0.605688
3 3 1 0.816556
4 4 0 0.360798
new df_a:
x y z
0 0 0 0
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
你看,它所做的是将df_a 中的y 和z 替换为df_b 中的相应列,基于x 在df_a 和df_b 之间的匹配。
如果我想保持y 不变怎么办?如果我希望它基于y 而不是x 替换怎么办。此外,如果有多个列我想进行替换(在真正的问题中,我必须使用新数据集更新数据集,其中两列或三列之间存在匹配项第四列的值)。
基本上,我想做某种合并-替换操作,在其中指定要合并/替换 on 的列以及应替换的列。
希望这能让事情更清楚。如果这不能用pandas 中的update 完成,我想知道是否还有另一种方法(没有为它编写一个带有for 循环的单独函数)。
【问题讨论】:
-
拜托,伙计,如果有人不知道你在做什么,你认为他们有足够的信息可以提供帮助吗?
-
添加了示例代码和输出。