python - 我想使用 diff 函数从前一个非空列中减去每一列
问题描述
我有一个很长的列列表,我想从当前列中减去前一列,并用差值替换当前列。所以如果我有:
A B C D
1 NaN 3 7
3 NaN 8 10
2 NaN 6 11
我希望输出为:
A B C D
1 NaN 2 4
3 NaN 5 2
2 NaN 4 5
我一直在尝试使用此代码: df2 = df1.diff(axis=1) 但这不会产生所需的输出
提前致谢。
解决方案
你可以这样做df.where
,然后为你的每一行update
带回第一个条目。non-null
DataFrame
样本数据:df
A B C D
0 1.0 NaN 3.0 7.0
1 1.0 4.0 5.0 9.0
2 NaN 4.0 NaN 4.0
3 NaN 4.0 NaN NaN
4 NaN NaN 3.0 7.0
5 3.0 NaN NaN 7.0
6 6.0 NaN NaN NaN
代码:
df_d = df.where(df.isnull(),
df.fillna(method='ffill', axis=1).diff(axis=1))
df_d.update(df.where(df.notnull().cumsum(1).cumsum(1) == 1))
输出:df_d
A B C D
0 1.0 NaN 2.0 4.0
1 1.0 3.0 1.0 4.0
2 NaN 4.0 NaN 0.0
3 NaN 4.0 NaN NaN
4 NaN NaN 3.0 4.0
5 3.0 NaN NaN 4.0
6 6.0 NaN NaN NaN
推荐阅读
- docker - 在 docker-compose 文件中添加环境变量作为正则表达式
- python - 如何使用 KNN 估算缺失值
- notepad++ - Notepad++ 或任何其他编辑器:下移一半的行
- android - 如何在反应原生启动活动中添加延迟
- php - 使用 CURL 上传文件并在 Laravel 方法中检索
- reactjs - 反应文本道具换行符
- sql-server - 选择枢轴
- java - 在 .war 文件中加载已编译的 jasper 文件时出错
- shopify - Shopify 购物车页面中的服务器端 API 调用
- ajax - 在 Django 中检索通过 Ajax 发送的 post 变量