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来做它.
非常感谢,
鲍里斯
如果您只想匹配两个数据框中的相互行:
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)
| 归档时间: |
|
| 查看次数: |
3425 次 |
| 最近记录: |