Python连接表并返回未找到的ID的默认文本

2024-04-20 10:08:49 发布

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

我有三个数据帧,如下所示

df1
Id
1
2
3
4
5

df2
id   val1
1    1
3    
4    0

df3
id   val2
1    1
5    
4    0

我的输出数据帧应该具有df1中存在的所有Id,我希望将df1与df2和df3结合起来。如果在dataframe中找不到ID,则在文本中输入“IDNP”,否则返回相应列中存在的任何值

IDNP-表示找不到ID

这是我的预期输出

Final DataFrame
id   val1    val2
1    1        1
2   "IDNP"   "IDNP" 
3            "IDNP"
4     0       0
5    "IDNP"       

我在df1、df2和df3中有100多列,有100000条记录。因此,性能也是一个值得关注的问题


Tags: 数据文本iddataframe记录finaldf1df2
1条回答
网友
1楼 · 发布于 2024-04-20 10:08:49

您可以使用左外部联接(mergehow='left')来实现这一点

(df1.rename({'Id': 'id'}, axis=1)
    .merge(df2, on='id', how='left')
    .merge(df3, on='id', how='left')
    .fillna('IDNP'))

   id  val1  val2
0   1     1     1
1   2  IDNP  IDNP
2   3        IDNP
3   4     0     0
4   5  IDNP      

或者,您可以使用pd.concat对“id”执行外部联接作为索引

(pd.concat([df2.set_index('id'), df3.set_index('id')], axis=1)
   .reindex(df1.Id, fill_value='IDNP')
   .reset_index())

   Id  val1  val2
0   1     1     1
1   2  IDNP  IDNP
2   3         NaN
3   4     0     0
4   5   NaN      

相关问题 更多 >