2017-06-22 84 views
0

一個新的專欄中,我有這樣的數據幀:的Python /大熊貓 - 構建基於列的比較

df: 
        CNPJ  Revenues 2016 Revenues 2015  Revenues 2014 
0  01.637.895/0001-32  R$ 12.696.658    NaN  R$ 10.848.213 
1  02.916.265/0001-60    NaN R$ 162.914.526 R$ 142.412.432 
2  02.932.074/0001-91    NaN    NaN  R$ 1.928.312 
3  03.853.896/0001-40  R$ 19.333.453 R$ 18.891.833  R$ 12.645.986 

的每一行代表一個公司,每一個「收入」一欄所代表的公司所引用的年收入。

我想創建一個名爲「last_revenues」的新列,它將具有收入的最後一個值。如果2016年是我們最後得到的,那麼將是2016年,如果我們沒有2016年但有2015年,2015年將是其中一個。如果我們還沒有2016或2015年,last_revenues將有2014年的價值。

它必須看起來像這樣:

    CNPJ  last_revenues 
0  01.637.895/0001-32  R$ 12.696.658 
1  02.916.265/0001-60 R$ 162.914.526 
2  02.932.074/0001-91  R$ 1.928.312 
3  03.853.896/0001-40  R$ 19.333.453 

可有人建議做這件事的呢?

回答

3
df1 = df.set_index('CNPJ') 
df1['last_revenues'] = df1.fillna(method='bfill',axis=1).iloc[:,0] 

或DSM表明,我們可以縮短這

df1['last_revenues'] = df1.bfill(axis=1).iloc[:,0] 
df1.reset_index() 

輸出:

    CNPJ Revenues 2016 Revenues 2015 Revenues 2014 \ 
0 01.637.895/0001-32 R$ 12.696.658    NaN R$ 10.848.213 
1 02.916.265/0001-60   NaN R$ 162.914.526 R$ 142.412.432 
2 02.932.074/0001-91   NaN    NaN R$ 1.928.312 
3 03.853.896/0001-40 R$ 19.333.453 R$ 18.891.833 R$ 12.645.986 

    last_revenues 
0 R$ 12.696.658 
1 R$ 162.914.526 
2 R$ 1.928.312 
3 R$ 19.333.453 
+1

'bfill'是其自己的方法。 – DSM

+0

@DSM感謝您的改進。 –

1

您可以使用fillna 2次:

df['last_revenues'] = df['Revenues 2016'].fillna(df['Revenues 2015']).fillna(df['Revenues 2014'])