当前位置: 首页 > 知识库问答 >
问题:

缺少替换条件Python的值

刘丰羽
2023-03-14

我有一个数据集,包含一系列国家和年份的几个指标的值(3072,1134行和列),但有些NaN。

下面是数据集的示例:

我想根据提交的列的值替换缺少的值。

仅当相应的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的错误输出

你知道如何通过修复这个代码来解决这个问题吗?使用循环或选择这2列(Age14和Age12)的解决方案不是最佳的,因为我有几个列(“......”在示例中),需要一个系统的解决方案

非常感谢。


共有1个答案

冯鸿光
2023-03-14

您可以使用参数limit=1来限制仅从前一行值填充,而不是从更高的值填充:

df = df.where(~df.Submitted.isnull(), df.fillna(axis=0, method='ffill',limit=1))

或者更好的是,简化代码,如下所示:

使用。掩码()而不是。其中,这样您的代码就不需要额外的步骤来否定布尔掩码。另外,使用ffill(),这是的简化形式。fillna(轴=0,方法为'ffill')

df = df.mask(df.Submitted.isna(), df.ffill(limit=1))

结果:

print(df)

    Year Country  Submitted  Age12  Age14
0   2017     CHI        1.0  267.0  136.0
1   2018     CHI        1.0  267.0    NaN
2   2019     CHI        1.0  267.0    NaN
3   2020     CHI        1.0  244.0  203.0
4   2017     ALB        1.0  160.0  148.0
5   2018     ALB        1.0  163.0  165.0
6   2019     ALB        1.0    NaN    NaN
7   2020     ALB        1.0  161.0    NaN
8   2017     GER        1.0    NaN  320.0
9   2018     GER        1.0  451.0  381.0
10  2019     GER        1.0  451.0  381.0
11  2020     GER        1.0  361.0  321.0
12  2017     BRI        1.0    NaN    NaN
13  2018     BRI        1.0    NaN    NaN
14  2019     BRI        1.0    NaN    NaN
15  2020     BRI        1.0  322.0  298.0
 类似资料:
  • 我有一个如下的数据帧 我想以通用方式替换缺少的值,即。为此,我创建了一个函数,如下所示 当我应用这个函数时,如下所示 我得到的数据帧如下 因此,它实际上正确地删除了列,但未能删除列。我知道过去有关于这个话题的讨论(这里)。我还是可能错过了什么?

  • 问题内容: 我可能在做一些非常愚蠢的事情,但是我很沮丧。 我有一个数据框,我想用超过零的值替换特定列中的值。我以为这是实现此目标的一种方式: 如果将通道复制到新的数据框中,这很简单: 这完全符合我的要求,但似乎无法与通道一起用作原始数据帧的一部分。 问题答案: 可以在0.20.0之前的熊猫版本上正常工作,但是由于pandas为0.20.0 ,因此不推荐使用,因此应避免使用它。而是可以使用或索引器。

  • 问题内容: 我想替换元素标签中的值,具体取决于它的值以及另一个元素的值(与所述元素处于同一级别),这两个元素到处都在同一个父元素标签中(每个父标签都是唯一的) (由于其自身的ID属性)。我想在存储过程中的此XML变量的各个位置进行更改。 作为第一次使用此计时器,我对如何修改整个xml中的元素感到困惑。这两个元素都存在于整个文档的同一父元素中,并且这些父标签中的每一个都有唯一的ID属性。 任何建议都

  • 问题内容: 跑步的时候我得到了。我的项目名为,目前正在开发一个名为的应用。 请注意,此错误是在相对较新的Django提交中添加的:固定#24452-固定了带有嵌套路径的HashedFilesMixin正确性。。 fellow_go / settings.py assistant_go / urls.py 我有一个favicon.ico文件: 奇怪的是,没有错误发生python manage.py

  • 具有不同角色的用户需要在网页顶部有不同的navbar。我的topnavs是th:片段,用单独的文件编写,这部分代码工作正常。但是当我使用th: switch和th:替换时,所有topnavs都会显示在网页中,而不仅仅是一个。 我在寻找这些问题的解决方案,但没有任何帮助: 带有多个大小写的胸腺叶开关语句 如何使用thymeleaf条件-if-elseif-else 我尝试过的事情: #2 #3 #4

  • 问题内容: 我已安装在主目录中。 我正在尝试运行一个需要python 2.7.x版本的脚本,而我却丢失了bz2错误 我尝试安装bz2模块,但出现很多错误 问题答案: 可能是从源代码构建python时,没有bz2标头。 在Ubuntu / Debian上安装它们: 软呢帽: 并再次构建python。您可能会注意到python在配置/构建时会检查很多库,如果您错过其中的一些库,那么您的案例可能就不会支