Python Dataframe获取每行最后一个非空列的值
我有一个数据帧,如下所示:Python Dataframe获取每行最后一个非空列的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,如下所示: 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
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]
你能帮我解决这个问题吗?谢谢。想法是选择所有列,不使用“第一个”选项,然后按缺少值的行向前填充,最后选择“最后一列”:
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