通过比较值合并来自多个pandas dataframe的选定列

2024-06-09 15:43:06 发布

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

我的df1如下:

id
1
2
3
4
5
6
7

我的df2是:

^{pr2}$

我的df3是:

id2 name2 val2
1   abbb1  90
2   abbb2  20
5   abbb5  50
6   abbb6  60

所以,我想从df2df3中选取值,通过匹配ID将其添加到df1中。因此,df1应该如下所示:

id  val1 val2
1   10   90
2   20   20
3   30   0
4   40   0
5   0    40
6   0    60
7   70   0

我所能达到的只是这一行代码,我被卡住了:

df1 = df1.merge(df2, df3, on=['id'])

请注意:

  • 我不希望在预期输出中包含name1和name2。在
  • 如果val1或val2不存在(比较后),我希望单元格 包含0。在

Tags: 代码iddf1df2id2val1val2pr2
1条回答
网友
1楼 · 发布于 2024-06-09 15:43:06

我想这里最好用^{}。在

df2df3中,id1和{}是必需的唯一值。在

df1['val1'] = df1['id'].map(df2.set_index('id1')['val1']).fillna(0).astype(int)
df1['val2'] = df1['id'].map(df3.set_index('id2')['val2']).fillna(0).astype(int)
print (df1)
   id  val1  val2
0   1    10    90
1   2    20    20
2   3    30     0
3   4    40     0
4   5     0    50
5   6     0    60
6   7    70     0

备选方案:

^{pr2}$

^{}的解决方案:

df1 = df1.merge(pd.merge(df2.rename(columns={'id1':'id'}), 
                         df3.rename(columns={'id2':'id'}), on='id', how='outer')
                [['id','val1','val2']].fillna(0).astype(int), how='left')
print (df1)
   id  val1  val2
0   1    10    90
1   2    20    20
2   3    30     0
3   4    40     0
4   5     0    50
5   6     0    60
6   7    70     0

相关问题 更多 >