gpt4 book ai didi

python - 通过比较值来合并多个 pandas 数据框中选定的列

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:29 25 4
gpt4 key购买 nike

我的df1如下:

id
1
2
3
4
5
6
7

我有df2作为:

id1 name1 val1
1 abbb1 10
2 abbb2 20
3 abbb3 30
4 abbb4 40
7 abbb7 70

我有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。

最佳答案

我认为这里更好地使用map .

df2df3 中的 id1id2 也必须具有唯一值。

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

替代方案:

a = df1['id'].map(df2.set_index('id1')['val1']).fillna(0).astype(int)
b = df1['id'].map(df3.set_index('id2')['val2']).fillna(0).astype(int)
df1 = df1.assign(val1=a, val2=b)
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

解决方案 merge :

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

关于python - 通过比较值来合并多个 pandas 数据框中选定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46647050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com