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)
我想覆盖Val列df1在ID比赛和Bool为True。这看起来像这样
ID Bool Val
1111 True EEE
2222 False BBB
3333 True FFF
4444 False DDD
Run Code Online (Sandbox Code Playgroud)
如您所见,AAA和CCC已被覆盖。
我正在考虑用一个if声明来做这件事
您可以使用布尔索引与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)