我有一个数据框,如:
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()。”
答案 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)
答案 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