用每列的组平均值填充 NaN [重复]

2024-04-04

我知道fillna()方法可用于在整个数据框中填充 NaN。

df.fillna(df.mean()) # fill with mean of column.

如何将平均值计算限制为 NaN 所在的组(和列)。

Exemple:

import pandas as pd 
import numpy as np 

df = pd.DataFrame({
    'a': pd.Series([1,1,1,2,2,2]),
    'b': pd.Series([1,2,np.NaN,1,np.NaN,4])
})

print df

Input

   a   b
0  1   1
1  1   2
2  1 NaN
3  2   1
4  2 NaN
5  2   4

Output(在 groupby('a') 之后并用组的平均值替换 NaN)

   a    b
0  1  1.0
1  1  2.0
2  1  1.5
3  2  1.0
4  2  2.5
5  2  4.0

IIUC 然后你可以打电话fillna http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html结果是groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.groupby.html在“a”和transform http://pandas.pydata.org/pandas-docs/stable/groupby.html#transformation on 'b':

In [44]:
df['b'] = df['b'].fillna(df.groupby('a')['b'].transform('mean'))
df

Out[44]:
   a    b
0  1  1.0
1  1  2.0
2  1  1.5
3  2  1.0
4  2  2.5
5  2  4.0

如果您有多个NaN那么我认为以下应该有效:

In [47]:
df.fillna(df.groupby('a').transform('mean'))

Out[47]:
   a    b
0  1  1.0
1  1  2.0
2  1  1.5
3  2  1.0
4  2  2.5
5  2  4.0

EDIT

In [49]:
df = pd.DataFrame({
    'a': pd.Series([1,1,1,2,2,2]),
    'b': pd.Series([1,2,np.NaN,1,np.NaN,4]),
    'c': pd.Series([1,np.NaN,np.NaN,1,np.NaN,4]),
    'd': pd.Series([np.NaN,np.NaN,np.NaN,1,np.NaN,4])
})
df

Out[49]:
   a   b   c   d
0  1   1   1 NaN
1  1   2 NaN NaN
2  1 NaN NaN NaN
3  2   1   1   1
4  2 NaN NaN NaN
5  2   4   4   4

In [50]:
df.fillna(df.groupby('a').transform('mean'))

Out[50]:
   a    b    c    d
0  1  1.0  1.0  NaN
1  1  2.0  1.0  NaN
2  1  1.5  1.0  NaN
3  2  1.0  1.0  1.0
4  2  2.5  2.5  2.5
5  2  4.0  4.0  4.0

你得到全部NaN对于“d”,因为所有值都是NaN对于团体1 for d

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用每列的组平均值填充 NaN [重复] 的相关文章

随机推荐

  • KTable 应该发出的事件

    我正在尝试测试一个拓扑 该拓扑作为最后一个节点 具有 KTable 我的测试是使用成熟的 Kafka 集群 通过 confluence 的 Docker 镜像 所以我not使用TopologyTestDriver 我的拓扑有键值类型的输入S
  • 自定义设计signed_up_but_unconfirmed消息

    实际上我想自定义signed up but unconfirmed消息该消息是 A message with a confirmation link has been sent to your email address Please fo
  • 如何检查SuperTab和jedi-vim是否激活?

    正如标题所述 如何检查插件是否已加载 当我击中时tab 对于 SuperTab 我得到的只是插入到我的文件中的普通字符 tab 当我点击ctrl 空格键我只是被抛出插入模式 与点击相同的行为ESC The scriptnames命令列出所有
  • 办公文档设置

    我目前正在存储一个键值对Office context documents settings使用以下函数 Office context document settings set name value 存储键值对后 我将重新启动加载项并尝试使
  • 无法将 SQL 查询的结果传递给 JAVA 中的方法

    这是我第一次使用 Java 我很困惑 我创建了这个方法 List
  • 即使使用文档中的示例,也无法模拟打开

    我直接从 Python 复制并粘贴了以下代码模拟文档 https docs python org 3 library unittest mock html mock open from unittest mock import patch
  • 无法安装 MySQL-python

    好的 我最近从 Ubuntu 10 04 升级到 12 04 只会面临很多问题 我是这方面的新手 所以你可能需要更详细地或一步一步地告诉我 我有一个 django 项目运行完美 但现在它给了我这个错误 File usr local lib
  • 在 Fabric.js 中控制 z-index

    在fabricjs中 我想创建一个场景 其中鼠标下方的对象在z index中上升到场景的顶部 然后一旦鼠标离开该对象 它就会返回到它来自的z index 无法设置 object zindex 这很好 相反 我使用一个占位符对象 将其放入旧位
  • 控制加速度直到到达某个位置的算法

    我有一个可以移动的点 在一维 并且我需要它平滑地移动 所以我认为它的速度必须是一个连续函数 我需要控制加速度 然后计算它的速度和位置 该算法对我来说似乎并不明显 但我想这一定是一个常见问题 我只是找不到解决方案 Notes 对象在移动时的最
  • Python - 将 set-cookies 响应转换为 cookie 字典

    如何转换response set cookie 输出字符串来自httplib2回应像 cookie1 xxxyyyzzz Path Expires Wed 03 Feb 2015 08 03 12 GMT Secure HttpOnly c
  • GLUT 退出重新定义错误

    在我的简单 OpenGL 程序中 我收到以下有关退出重新定义的错误 1 gt c program files microsoft visual studio 8 vc include stdlib h 406 error C2381 exi
  • Android Studio 3 库模块和功能模块的区别

    Android Studio 3 中至少有两种新的模块类型 首先是Instant app module第二个是feature module With Instant App module这是很明显的但是feature module从我的角度
  • arrayWillChange 中“无法调用未定义的‘销毁’方法”

    我有一个非常标准的数组 模板关系设置 但是当我将一个新项目推入数组时 我得到了上面提到的内容Cannot call method destroy of undefined错误在arrayWillChangeEmber源码的方法 for id
  • 将格式化日期转换回unix

    我将使用哪个函数将自定义格式的日期转换回 Unix 纪元时间 例如 Ymd gt U 我在看date U strtotime 20140525 但我不确定如何适应原始格式Ymd 该函数如何知道输入格式是 YYYYMMDD 因为它看起来有效
  • 如何将 Haskell 转换为 F#?

    我正在尝试通过翻译我很久以前编写的一些 Haskell 代码来学习 F 但我陷入了困境 percent Int gt Int gt Float percent a b fromInt a fromInt b 100 freqs String
  • 跨多个线程的 Java 日志记录

    我们有一个使用线程的系统 以便它可以同时并行处理不同的功能 我们希望找到一种方法将特定 事务 的所有日志条目绑定在一起 通常 人们可能会使用 threadName 将它们收集在一起 但显然这在多线程情况下会失败 如果没有通过每个方法调用传递
  • 使用 C++ 登录到 Windows 上的事件查看器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 C 应用程序上使用日志 但是 我想使用 Windows 10 事件查看器 而不是文本文件 我
  • 如何将“捐赠”按钮集成到印度的网站中?

    我们正在为印度的慈善信托基金开发一个网站 为此 我们需要在网站上添加一个 捐赠 按钮 供任何想要通过支付网关向慈善机构捐赠的人使用 然而 Paypal 和 Google Wallet Google Checkout 都限制在印度使用 捐赠
  • 杰克逊:将对象视为原始对象

    我有一门或多或少是围绕双精度型的包装类 当我通过 Jackson 序列化我的类时 我将收到类似以下内容的信息 value 123 0 我基本上希望发生的是 杰克逊只给我 123 0 0 如果我可以扩展 Number 我的问题就会得到解决 但
  • 用每列的组平均值填充 NaN [重复]

    这个问题在这里已经有答案了 我知道fillna 方法可用于在整个数据框中填充 NaN df fillna df mean fill with mean of column 如何将平均值计算限制为 NaN 所在的组 和列 Exemple im