【问题标题】:Python Dataframe Get Value of Last Non Null Column for Each RowPython Dataframe获取每行最后一个非空列的值
【发布时间】:2020-02-26 14:16:49
【问题描述】:

我有一个如下的数据框:

    ID  2016    2017    2018    2019    2020
0   1   1.64    NaN     NaN     NaN     NaN
1   2   NaN     NaN     NaN     0.78    NaN
2   3   1.11    0.97    1.73    1.23    0.87
3   4   0.84    0.74    1.64    1.47    0.41
4   5   0.75    1.05    NaN     NaN     NaN

我想从最后一个非空列中获取值:

    ID  2016    2017    2018    2019    2020    LastValue
0   1   1.64    NaN     NaN     NaN     NaN     1.64
1   2   NaN     NaN     NaN     0.78    NaN     0.78
2   3   1.11    0.97    1.73    1.23    0.87    0.87
3   4   0.84    0.74    1.64    1.47    0.41    0.41
4   5   0.75    1.05    NaN     NaN     NaN     1.05

我尝试如下循环遍历年份列,但无法完全实现我想要的。

for i in reversed(df.columns[1:]):
     if df[i] is not None:
          val = df[i]

您能帮忙解决这个问题吗?谢谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    想法是先通过DataFrame.iloc 选择所有列,然后向前填充每行缺失值并最后选择最后一列:

    df['LastValue'] = df.iloc[:, 1:].ffill(axis=1).iloc[:, -1]
    print (df)
       ID  2016  2017  2018  2019  2020  LastValue
    0   1  1.64   NaN   NaN   NaN   NaN       1.64
    1   2   NaN   NaN   NaN  0.78   NaN       0.78
    2   3  1.11  0.97  1.73  1.23  0.87       0.87
    3   4  0.84  0.74  1.64  1.47  0.41       0.41
    4   5  0.75  1.05   NaN   NaN   NaN       1.05
    

    详情

    print (df.iloc[:, 1:].ffill(axis=1))
       2016  2017  2018  2019  2020
    0  1.64  1.64  1.64  1.64  1.64
    1   NaN   NaN   NaN  0.78  0.78
    2  1.11  0.97  1.73  1.23  0.87
    3  0.84  0.74  1.64  1.47  0.41
    4  0.75  1.05  1.05  1.05  1.05
    

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2021-10-25
      相关资源
      最近更新 更多