熊猫:如果列中的值出现在另一列中,则用第三列中的值替换

时间:2019-03-31 14:30:58

标签: python pandas

我需要执行一些复杂的操作。我有一个数据框:让我们将其称为df1,列为“ a”。它的某些值出现在df2(另一个数据帧)的“ b”列中。如果某个值位于df2的“ b”中,我想将其替换为df3列“ c”中的值,并且该行的编号应与“ b”中的行编号相同,并且与“ a”中的值匹配。如果值不在“ b”中,我想用一个连续的“ constant”代替它。在每个列中,任何值都可以出现一次以上。

如果...

a = [r,t,y,u,i,t]
b = [q,u,n,r,z,d,e,r,t,r]
c = [1,2,3,4,5,6,7,4,9,4]
constant = 200

a变为:

a = [4,9,200,2,200,9]

我该怎么做?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以通过bc创建字典,只需要b的相同长度和唯一值,然后再{map创建a值1}},以指定默认值:

get

使用DataFrames:

d = dict(zip(b, c))

out = [d.get(x, constant) for x in a]
print (out)
[4, 9, 200, 2, 200, 9]

或使用d = dict(zip(df2.b, df3.c)) out = [d.get(x, constant) for x in df1.a] print (out) [4, 9, 200, 2, 200, 9] 并用map替换缺失的不匹配值:

fillna