我有两个DF:
**
这是一个简单的例子,实际上df1有1000k +行和10+列,df2只有24行和更少的列。我想循环df2中的所有行,并将df2中的那些特定行(例如列'B'和'D')与df1中的相同列名进行比较,如果行值匹配(如果列B中的值和列D中的值) df2在相同的列中匹配相同的值,但在df1)中将该行中的相应斑马值分配给df2中的同一行,创建新的列斑马并分配该值。如果找不到匹配0或NaN的匹配。
df1 = pd.DataFrame({'A':[3, 2, 5, 1, 6], 'B': [4, 6, 5, 8, 2], 'C': [4, 8, 3, 8, 0], 'D':[1, 4, 2, 8, 7], 'zebra': [5, 7, 2, 4, 8]})
df2 = pd.DataFrame({'B': [7, 3, 5, 1, 8], 'D':[4, 5, 8, 2, 3] })
print(df1)
print(df2)
A B C D zebra
0 3 4 4 1 5
1 2 8 8 5 7
2 5 5 3 2 2
3 1 6 8 5 4
4 6 2 0 7 8
B D
0 7 4
1 3 5
2 5 8
3 8 5
4 8 3
从示例中,只有df2中的行索引3匹配值'B':8和'D':5带有来自df1的索引为2的行(注意:行索引在比较中不重要)并分配相应的行值7从“斑马”栏到df2。
答案 0 :(得分:0)
合并会做
df2.merge(df1[['B', 'D', 'zebra']], on = ['B', 'D'], how = 'left')
B D zebra
0 7 4 NaN
1 3 5 NaN
2 5 8 NaN
3 8 5 7.0
4 8 3 NaN