python-3.x - pandas中如何以group的方式填写na
问题描述
我有一个像这样的熊猫数据框:
df =
a b
a1 b1
a1 b2
a1 b1
a1 Nan
a2 b1
a2 b2
a2 b2
a2 Nan
a2 b2
a3 Nan
对于 的每一个值a
,b
都可以有多个b
对应的值。我想用由 的相应值分组的值的模式来填充 的所有nan
值。b
b
a
生成的数据框应如下所示:
df =
a b
a1 b1
a1 b2
a1 b1
a1 ***b1***
a2 b1
a2 b2
a2 b2
a2 **b2**
a2 b2
a3 b2
以上b1
是b
对应的模式a1
。同样,b2
是对应的模式a2
。最后,a3 没有数据,所以它通过 global mode 填充它b2
。
对于 b 列的每个 nan 值,我想用 b 列的值的模式填充它,但是对于 a 的特定值,无论模式是什么。
编辑:
如果有一个组a
没有数据b
,则以全局模式填充。
解决方案
尝试:
# lazy grouping
groups = df.groupby('a')
# where all the rows within a group is NaN
all_na = groups['b'].transform(lambda x: x.isna().all())
# fill global mode
df.loc[all_na, 'b'] = df['b'].mode()[0]
# fill with local mode
mode_by_group = groups['b'].transform(lambda x: x.mode()[0])
df['b'] = df['b'].fillna(mod_by_group)
推荐阅读
- google-apps-script - 如何计算excel或工作表上一行中未突出显示的条目数
- android - 使用 android App 设置 Android TV 的输入
- python - 如何在 Selenium 和 Firefox 中检索原始 JSON 数据?
- css - CSS未在codeigniter 4中加载
- python - 有没有办法遍历列表和函数?
- postgresql - 如何使用 pgAdmin4 为数据库中的所有触发器和表生成脚本
- java - Google Drive API V3 下载返回 416 错误
- amazon-web-services - 负载均衡器初始请求容量
- javascript - 列表正在更新,但相应的本地存储未更新
- thrift - 异常结束时的 Thrift 消息