仅根据条件python加入

时间:2019-09-17 09:33:47

标签: python pandas dataframe

我想加入,但仅在某些其他条件为True

的情况下

我有一个看起来像这样的DataFrame df1

ID    Bool   Val
1111  True   AAA
2222  False  BBB
3333  True   CCC
4444  False  DDD

然后我有另一个这样的DataFrame df2

ID    Val
1111  EEE
3333  FFF
5555  GGG

并且我想覆盖Val匹配且df1ID的{​​{1}}中的Bool列。看起来像这样

True

您会看到ID Bool Val 1111 True EEE 2222 False BBB 3333 True FFF 4444 False DDD AAA已被覆盖。

我正在考虑使用CCC语句

1 个答案:

答案 0 :(得分:4)

您可以将boolean indexingloc一起使用来选择df1的行,其中'bool'列为True,也可以使用pandas.Series.map来正确分配:

b=df1['Bool']
df1.loc[b,'Val']=df1.loc[b,'ID'].map(df2.set_index('ID')['Val'])
print(df1)

     ID   Bool  Val
0  1111   True  EEE
1  2222  False  BBB
2  3333   True  FFF
3  4444  False  DDD

您还可以使用pandas.Series.replace

df1.loc[b,'Val']=df1.loc[b,'ID'].replace(df2.set_index('ID')['Val'])