根据相似的列值在单独的熊猫数据框中乘以列

时间:2019-03-03 01:45:19

标签: python pandas

说我有2个数据帧

df1 = pd.DataFrame({'alpha': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'], 
                    'number': [1, 2, 3, 4, 5, 6, 7, 8, 9]})
  alpha  number
0     A       1
1     A       2
2     A       3
3     B       4
4     B       5
5     B       6
6     C       7
7     C       8
8     C       9

df2 = pd.DataFrame({'alpha': ['A', 'B', 'C'],
                    'mult': [2, 3, 4]})    
  alpha  mult
0     A     2
1     B     3
2     C     4

我想创建一个第三个数据帧,它将基于特定的alpha值将df1中的所有值乘以df2中相应的“ mult”值。解决方案如下所示:

alpha  soln
0     A     2
1     A     4
2     A     6
3     B    12
4     B    15
5     B    18
6     C    28
7     C    32
8     C    36

有关如何轻松做到这一点的任何提示?

2 个答案:

答案 0 :(得分:3)

我想到的第一件事是合并两个数据帧,然后对合并的数据帧进行乘法:

Nothing

这行得通,尽管我确实也应该采用一种更简单,一步一步的方式。

编辑-这是一种在一行中完成此操作的方法:

tmp = df1.merge(df2)

tmp
#   alpha  number  mult
# 0     A       1     2
# 1     A       2     2
# 2     A       3     2
# 3     B       4     3
# 4     B       5     3
# 5     B       6     3
# 6     C       7     4
# 7     C       8     4
# 8     C       9     4

df1.soln = tmp.number * tmp.mult

EDIT2-这是另一种形式,类似于@ scott-boston的评论:

df1.soln = (df1.set_index("alpha").number * df2.set_index("alpha").mult).values

答案 1 :(得分:1)

map + multiply

您的联接基于单个列,其中键在df2中是唯一的,因此请映射。

df1['soln'] = df1.number.mul(df1.alpha.map(df2.set_index('alpha').mult))

#  alpha  number  soln
#0     A       1     2
#1     A       2     4
#2     A       3     6
#3     B       4    12
#4     B       5    15
#5     B       6    18
#6     C       7    28
#7     C       8    32
#8     C       9    36