我需要执行一些复杂的操作。我有一个数据框:让我们将其称为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]
我该怎么做?谢谢。
答案 0 :(得分:0)
您可以通过b
和c
创建字典,只需要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