【问题标题】:Python/Pandas - building a new column based in columns comparisonPython/Pandas - 基于列比较构建一个新列
【发布时间】:2017-06-22 20:24:55
【问题描述】:

我有这个数据框:

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

有人可以建议一种方法吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    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  
    

    【讨论】:

    • bfill 是它自己的方法。
    • @DSM 感谢您的改进。
    【解决方案2】:

    你可以使用fillna 2次:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多