创建列上最小计算值的列

时间:2016-04-15 03:32:46

标签: python pandas

我有一个数据框,如:

                SA         MA       SB       MB
2015-08-31       100       60       80       25
2015-08-31       100       60       80       25
2015-09-30       90        90       75       70
2015-10-31       34        12       65       6    

我可以创建一个新列,即分为两列: df.new_col = df.SA/df.MA

但我需要做的是,为每一行创建一个新的列,该列是[SA / MA,SB / MB]的最小值

我试过

df['new_col'] = min((df.SA / df.MA), (df.SB / df.MB)) 

但我得到一个错误“ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。”

3 个答案:

答案 0 :(得分:2)

您可以使用np.minimum

@ DSM指针后更新。

In [148]: df['new_col'] = pd.np.minimum(df.SA / df.MA, df.SB / df.MB)

In [149]: df
Out[149]:
             SA  MA  SB  MB   new_col
2015-08-31  100  60  80  25  1.666667
2015-08-31  100  60  80  25  1.666667
2015-09-30   90  90  75  70  1.000000
2015-10-31   34  12  65   6  2.833333

您可以明确使用像pd.np.minimum((df.SA / df.MA).values, (df.SB / df.MB).values)

这样的numpy数组

答案 1 :(得分:1)

您可以从2个系列创建数据框,然后获取最小值。

df['new_col'] = pd.DataFrame([df.SA / df.MA, df.SB / df.MB]).min() 

答案 2 :(得分:1)

df['new_col'] = pd.concat([df['SA']/df['MA'], df['SB']/df['MB']], axis=1).min(axis=1)

         Date   SA  MA  SB  MB   new_col
0  2015-08-31  100  60  80  25  1.666667
1  2015-08-31  100  60  80  25  1.666667
2  2015-09-30   90  90  75  70  1.000000
3  2015-10-31   34  12  65   6  2.833333