仅基于条件的联接

2024-04-24 03:54:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想加入,但只在其他条件为True的情况下

我有一个数据帧df1,看起来像这样

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

然后我有了另一个数据帧df2,像这样

ID    Val
1111  EEE
3333  FFF
5555  GGG

我想覆盖df1中的Val列,其中ID匹配,BoolTrue。这个看起来像这样

ID    Bool   Val
1111  True   EEE 
2222  False  BBB
3333  True   FFF
4444  False  DDD

如您所见,AAACCC已被覆盖。你知道吗

我想用if语句来实现这一点


Tags: 数据idfalsetruefff情况val条件
1条回答
网友
1楼 · 发布于 2024-04-24 03:54:28

可以使用boolean indexingloc来选择'bool'列为True的df1行,也可以使用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'])

相关问题 更多 >