我有一个数据集,其中包含一系列国家和年份(30721134行和列)的几个指标的值,但有些是NaN
下面是数据集的示例:
我想根据Submitted
列的值替换缺少的值。
仅当相应的Submitted
值为“NaN”时,我才想更改前一行的值。
这就是我想要的:
在社区的帮助下,我尝试使用
df = df.where(~df.Sumbitted.isnull(), df.fillna(axis=0, method='ffill'))
及
df = df.where(~df.Sumbitted.isnull(), df.fillna(axis=0, method='ffill',limit=2))
及
df = df.where(~df.Sumbitted.isnull(), interpolate(method="pad", limit=2))
但是,使用这些选项,我得到了以下结果。问题是代码检索以前的非NaN值,但如果以前的值是NaN,则代码检索以前的值,直到找到非NaN值。
输出:
查看CHI 2019 Age14和BRI Age12和Age14的错误输出
您知道如何通过修复此代码来解决此问题吗? 使用循环或选择这两列(年龄14和年龄12)的解决方案不是最优的,因为我有几个列(“…”),需要系统的解决方案
多谢各位
您可以使用参数
limit=1
来限制仅从前一行值填充,而不是从更高的行值填充:或者更好的做法是,简化代码,如下所示:
使用^{} 而不是^{} ,这样代码就不需要额外的步骤来否定布尔掩码。另外,使用^{} ,这是
.fillna(axis=0, method='ffill')
的简化形式:结果:
相关问题 更多 >
编程相关推荐