2017-06-22 15 views
0

に基づいて、新しい列を構築する:パイソン/パンダ - 私はこのデータフレームを持つ列比較

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年は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 

誰かがそれを行う方法を提案することはできますか?

あなたが fillna 2回使用することができます

答えて

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

df['last_revenues'] = df['Revenues 2016'].fillna(df['Revenues 2015']).fillna(df['Revenues 2014']) 
関連する問題