说我有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
有关如何轻松做到这一点的任何提示?
答案 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