python - Python 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 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]
你能帮忙解决这个问题吗?谢谢。
解决方案
想法是选择所有没有首先 by 的列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
推荐阅读
- angularjs - 带有标题的下拉菜单中的AngularJs默认选择
- dockerfile - Docker从dockerfile图像错误运行容器
- android - 使用带有选项卡布局片段的自定义布局更改适配器中的文本颜色
- c++ - Visual Studio 远程调试 Makefile 项目的远程输出路径错误
- python - 如何在python中遍历两个数据框
- java - 如何使用 Firebase Firestore 获取查询数据?
- datatables - 数据表和 YADCF - 多选过滤器
- python - 如何在 python 中运行 netstat -nb
- angular - 如何使用带有 Angular 5 和 Material Design 的 innerHtml 更新动态文本
- javascript - 连接到花式树的可排序在拖放时忘记了它的位置