基于条件的熊猫数据帧计算

时间:2020-08-11 11:11:44

标签: python pandas function calculation

我有两个数据框,我需要使用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行...我需要一种有效的方法吗?有吗?

3 个答案:

答案 0 :(得分:3)

在第二个DataFrame中将Series.map用于新的SeriesBrand,用于将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']