仅基于条件加入 python

Tay*_*lrl 2 python dataframe pandas

我想加入,但仅在某些其他条件成立的情况下 True

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

ID    Bool   Val
1111  True   AAA
2222  False  BBB
3333  True   CCC
4444  False  DDD
Run Code Online (Sandbox Code Playgroud)

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

ID    Val
1111  EEE
3333  FFF
5555  GGG
Run Code Online (Sandbox Code Playgroud)

我想覆盖Valdf1ID比赛和BoolTrue。这看起来像这样

ID    Bool   Val
1111  True   EEE 
2222  False  BBB
3333  True   FFF
4444  False  DDD
Run Code Online (Sandbox Code Playgroud)

如您所见,AAACCC已被覆盖。

我正在考虑用一个if声明来做这件事

ans*_*sev 5

您可以使用布尔索引loc选择DF1,其中的行'bool'列是真,也可以使用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
Run Code Online (Sandbox Code Playgroud)

您也可以使用pandas.Series.replace

df1.loc[b,'Val']=df1.loc[b,'ID'].replace(df2.set_index('ID')['Val'])
Run Code Online (Sandbox Code Playgroud)