如何将pandas数据帧相乘并保留行键

时间:2016-09-07 16:25:40

标签: python pandas dataframe

我正在努力将数据帧相乘并保留行键。

我有两个文件,称之为F1和F2。 F1具有多部分组密钥(g1,g2,g3),两部分类型密钥(k1,k2)和一些权重(r1,r2)。 F2为每个Type键都有一系列值。

我想在k1和k2上加入它们,并将每个n乘以r1和r2。

我认为groupby和dataframe multiply应该可以工作,但我看不出怎么做。我唯一需要做的就是合并然后逐列相乘,但它超级慢。

F1
g1  g2  g3  k1  k2  r1  r2
A   A   A   A   A   1   2
A   A   A   A   B   3   4
A   A   B   A   B   2   3

F2
k1  k2  n   r1  r2
A   A   1   0   1
A   A   2   1   1
A   A   3   1   0
A   B   1   3   4
A   B   2   4   4
A   B   3   4   3
A   C   1   1   1
A   C   3   4   5
A   C   2   3   4

Result
g1  g2  g3  k1  k2  n   r1  r2
A   A   A   A   A   1   0   2
A   A   A   A   A   2   1   2
A   A   A   A   A   3   1   0
A   A   A   A   B   1   9   16
A   A   A   A   B   2   12  16
A   A   A   A   B   3   12  12
A   A   B   A   B   1   6   12
A   A   B   A   B   2   8   12
A   A   B   A   B   3   8   9

由于

1 个答案:

答案 0 :(得分:1)

mrg = F1.merge(F2, on=['k1', 'k2'])

mrg['r1'] = mrg.filter(like='r1').prod(1)
mrg['r2'] = mrg.filter(like='r2').prod(1)
drops = ['r1_x', 'r1_y', 'r2_x', 'r2_y']
mrg.drop(drops, axis=1)

enter image description here