2016-04-15 14 views
0

我有這樣一個數據幀的列最小列:創建是計算的值的上

   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]

我試圖

最低

但我得到一個錯誤「ValueError:一個系列的真值不明確。使用a.empty,a.bool(),a.item(),a.any()或a.all()。「

回答

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 

你可以明確地使用numpy的陣列狀pd.np.minimum((df.SA/df.MA).values, (df.SB/df.MB).values)

+0

你甚至需要'.values'嗎?對我來說,它的表現應該沒有它們(與現代的numpy和大熊貓 - 我*認爲* numpy不像以前那樣用於和系列一樣好玩) – DSM

+0

你說得對。那裏我很清楚。更新瞭解決方案。謝謝。 – Zero

+0

我喜歡這個最直接的,所以我選擇它作爲最佳答案。 – ViennaMike

1

您可以創建2系列的數據幀,然後獲取最小值

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

有一個錯字,它會拋出'ValueError:不能從重複軸重新索引' – Zero

+0

哎呀,謝謝指出。 –

+0

我的意思是,'InvalidIndexError:Reindexing只對唯一有價值的Index對象有效' – Zero

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