Pandas循环数据帧并将所有行与其他DF行进行比较并分配值

时间:2017-10-26 20:45:53

标签: python pandas dataframe

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

1 个答案:

答案 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