我想加入,但仅在某些其他条件为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
匹配且df1
为ID
的{{1}}中的Bool
列。看起来像这样
True
您会看到ID Bool Val
1111 True EEE
2222 False BBB
3333 True FFF
4444 False DDD
和AAA
已被覆盖。
我正在考虑使用CCC
语句
答案 0 :(得分:4)
您可以将boolean indexing与loc
一起使用来选择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'])