我有两个数据框,我需要使用1作为参考来计算其他值。
例如,我有df
:
Brand LB_ID Score
BMW Class 98
BMW Cost 99
VW Class 85
VW Cost 70
另外df_lb
这样
Brand Total
BMW 56
VW 180
我需要使用此公式来计算另一列:(Score(df) / Total(df_lb)) * 100
通常我可以对这些数据使用if-else条件,但是我有大数据,并且需要花费大量时间来编写数百条if_else行...我需要一种有效的方法吗?有吗?
答案 0 :(得分:3)
在第二个DataFrame中将Series.map
用于新的Series
和Brand
,用于将Score
列除以100
并用于新列:
df['new'] = df['Score'].div(df['Brand'].map(df_lb.set_index('Brand')['Total'])).mul(100)
print (df)
Brand LB_ID Score new
0 BMW Class 98 175.000000
1 BMW Cost 99 176.785714
2 VW Class 85 47.222222
3 VW Cost 70 38.888889
答案 1 :(得分:1)
将Brand
设置为两个数据帧的索引并除法:
df["new"] = (df.set_index("Brand")
.Score
.div(df_lb.set_index("Brand").Total)
.mul(100)
.array)
df
Brand LB_ID Score new
0 BMW Class 98 175.000000
1 BMW Cost 99 176.785714
2 VW Class 85 47.222222
3 VW Cost 70 38.888889
答案 2 :(得分:0)
首先合并
m = df.merge(df_lb)
然后计算您的新列
m['new'] = 100 * m['Score'] / m['Total']