2017-08-24 55 views
1

我有這樣的數據幀:的Python /大熊貓 - 選擇列和行申請方程

   ano id    unit period    Sales ... 
business_id               
9564   2012 302    s anual  5964168.52 
9564   2011 303    k anual  5774707.15 
2361   2013 304    s anual  3652575.31 

對於每一行,如果單位是「K」我要乘列銷售值的所有未來的人1000。這一次應該是這樣的:

   ano id    unit period    Sales ... 
business_id               
9564   2012 302    s anual  5964168.52 
9564   2011 303    k anual  5774707000.15 
2361   2013 304    s anual  3652575.31 

- >我想在列銷售,並在所有的未來的人(所以這將是第四列和)

如何應用它我可以這樣做嗎?

回答

1

你不能iloc混合布爾索引,但是你可以很容易地實現使用loc和索引關在數據幀列的相同的​​結果。

例如,要獲得從五個每一列開始在上面的例子中(只有一個)符合您布爾的選擇是:

>>> df.loc[df['unit'] == 'k', df.columns[5:]] 
     Sales 
1 5774707.15 
3

這裏有一種方法,使用.loc選擇行df.unit == 'k'和列Sales。使用*=如果你想讓它多列與1000

In [1518]: df.loc[df.unit == 'k', 'Sales'] *= 1000 

In [1519]: df 
Out[1519]: 
       ano id unit period   Sales 
business_id 
9564   2012 302 s anual 5.964169e+06 
9564   2011 303 k anual 5.774707e+09 
2361   2013 304 s anual 3.652575e+06 

乘這些值。

In [1526]: df 
Out[1526]: 
       ano id unit period  Sales  Nsales 
business_id 
9564   2012 302 s anual 5964168.52 5984168.52 
9564   2011 303 k anual 5774707.15 5794707.15 
2361   2013 304 s anual 3652575.31 3672575.31 

In [1527]: df.loc[df.unit == 'k', ['Sales', 'Nsales']] *= 1000 

In [1528]: df 
Out[1528]: 
       ano id unit period   Sales  Nsales 
business_id 
9564   2012 302 s anual 5.964169e+06 5.984169e+06 
9564   2011 303 k anual 5.774707e+09 5.794707e+09 
2361   2013 304 s anual 3.652575e+06 3.672575e+06 
+0

會不會有在第四列和應用它的方式(所以我不必爲每列創建一行,我的數據框很大)? – abutremutante

+1

而且,如上所述,來自位置調用的'.iloc'。我通常更喜歡顯式的'.loc'作爲列名。 – Zero

+0

這兩個建議都很好,謝謝你們。我試圖讓@Alexander的建議工作,但我去了這個錯誤:NotImplementedError:基於iLocation的整數類型的布爾索引不可用。任何想法可能是什麼? – abutremutante