python-3.x - 如何根据行数据有选择地在 Pandas df 中使用 ffill
问题描述
我正在尝试用前面的条目填充 Pandas df 中的列,但并非该列中的所有单元格都需要该条目 - 实际上需要不同的条目。例如:
原df:
OAS CLASS2 CLASS3 CLASS4 Ticker
0 240.59 NaN NaN NaN Total
1 269.72 Fins NaN NaN Fins
2 251.88 Fins Banking Banking Banking
3 234.44 Fins NaN NaN ACAFP
4 195.80 Fins NaN NaN ACHMEA
5 288.63 Fins Insur NaN Insur
6 313.79 Fins Insur Life Life
7 425.27 Fins Insur Life ACAFP
8 304.39 Fins NaN NaN AEGON
代码:
df2 = df.fillna(method='ffill')
df2
OAS CLASS2 CLASS3 CLASS4 Ticker
0 240.59 NaN NaN NaN Total
1 269.72 Fins NaN NaN Fins
2 251.88 Fins Banking Banking Banking
3 234.44 Fins Banking Banking ACAFP
4 195.80 Fins Banking Banking ACHMEA
5 288.63 Fins Insur Banking Insur
6 313.79 Fins Insur Life Life
7 425.27 Fins Insur Life ACAFP
8 304.39 Fins Insur Life AEGON
问题出在第 5 行,其中 CLASS4 列单元格现在显示 Banking 而不是 NaN,但应该按照左右相邻列显示“Insur”。我意识到我的代码根本没有试图纠正这个问题,但我只是不知道从哪里开始。
解决方案
ffill
方法向前fillna()
传播最后观察到的非空值,直到遇到另一个非空值。
因此,在您的情况下发生的情况是,在 CLASS4 中观察到值Banking并将其传播到所有 NaN 值,直到在此列中遇到另一个非空值。
因此,为了用左侧的值填充 NaN,您必须为您的方法提供axis=1
参数。fillna()
执行以下操作:
df2 = df.fillna(method='ffill', axis=1)
df2
将导致这样的事情:
0 0 240.59 240.59 240.59 240.59 Total
1 1 269.72 Fins Fins Fins Fins
2 2 251.88 Fins Banking Banking Banking
3 3 234.44 Fins Fins Fins ACAFP
4 4 195.8 Fins Fins Fins ACHMEA
5 5 288.63 Fins Insur Insur Insur
6 6 313.79 Fins Insur Life Life
7 7 425.27 Fins Insur Life ACAFP
8 8 304.39 Fins Fins Fins AEGON
推荐阅读
- html - 引导过滤器表未显示选择选项
- angular - Angular AOT 在使用异步管道评估 ngIf 时抛出错误
- node.js - 设置数组时缺少所需的值
- python - UnboundLocalError:分配前引用了局部变量“name_chk”
- r - RStudio 服务器 RSelenium chrome 服务器错误(无法访问 chrome)——但在 SSH R 终端会话中有效
- android - 在 UserManager.DISALLOW_ADJUST_VOLUME 用户权限处于活动状态时允许声音
- javascript - anobject.prototype vs Object.create(anobject.prototype) 赋值
- python - 全局变量未定义?无法从函数中获取标签以显示全局变量
- javascript - 在 Heroku 上部署 Javascript 文件时使用环境变量
- c# - 为什么 stackpanel 忽略 Orientation 属性?