如何解决如何根据行数据有选择地在Pandas df中使用填充
我正在尝试使用前面的条目填充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”。我意识到我的代码根本没有尝试纠正此问题,但我只是不知道从哪里开始。
解决方法
只需在axis=0
内提供fillna()
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。