比较两个不同大小的pandas数据帧

bor*_*ris 5 python numpy pandas

我有一个庞大的pandas数据帧,具有以下结构:

df1:
    A   B
0   0  12
1   0  15
2   0  17
3   0  18
4   1  45
5   1  78
6   1  96
7   1  32
8   2  45
9   2  78
10  2  44
11  2  10
Run Code Online (Sandbox Code Playgroud)

第二个,像这样小:

df2
   G   H
0  0  15
1  1  45
2  2  31
Run Code Online (Sandbox Code Playgroud)

我想按照以下规则向我的第一个数据帧添加一列: column df1.C = df2.H when df1.A == df2.G

我设法用for循环来做,但数据库很大,代码运行得非常慢,所以我正在寻找一个Pandas-way或numpy来做它.

非常感谢,

鲍里斯

Fra*_*röm 4

如果您只想匹配两个数据框中的相互行:

import pandas as pd

df1 = pd.DataFrame({'Name':['Sara'],'Special ability':['Walk on water']})
df1    
   Name Special ability
0  Sara   Walk on water

df2 = pd.DataFrame({'Name':['Sara', 'Gustaf', 'Patrik'],'Age':[4,12,11]})
df2
     Name  Age
0    Sara    4
1  Gustaf   12
2  Patrik   11

df = df2.merge(df1, left_on='Name', right_on='Name', how='left')
df
     Name  Age Special ability
0    Sara    4             NaN
1  Gustaf   12   Walk on water
2  Patrik   11             NaN
Run Code Online (Sandbox Code Playgroud)

这也可以通过多个匹配参数来完成:( 在本例中,来自 df1 的 Patrik 不存在于 df2 中,因为他们有不同的年龄,因此不会合并)

df1 = pd.DataFrame({'Name':['Sara','Patrik'],'Special ability':['Walk on water','FireBalls'],'Age':[12,83]})

df1
     Name Special ability  Age
0    Sara   Walk on water   12
1  Patrik       FireBalls   83

df2 = pd.DataFrame({'Name':['Sara', 'Gustaf', 'Patrik'],'Age':[4,12,11]})
df2
     Name  Age
0    Sara    4
1  Gustaf   12
2  Patrik   11

df = df2.merge(df1,left_on=['Name','Age'],right_on=['Name','Age'],how='left')
df
     Name  Age Special ability
0    Sara   12   Walk on water
1  Gustaf   12             NaN
2  Patrik   11             NaN
Run Code Online (Sandbox Code Playgroud)