python - 如何使用用户定义的函数执行 groupy by?
问题描述
所以我有两个数据框,一个是包含许多列的完整数据集,每一行都是一个观察值。
第二个数据框是第一个数据框的子集,但通过名为“县”的变量计算列中缺失值的百分比。
到目前为止,我有一个函数可以提供预期的结果并为整个列提供缺失的 %:
def missing_count(df, var):
percent_missing= df[var].isnull().sum() * 100 / len(df)
return round(percent_missing,2)
但我想做的是使其特定于一个县。例如 - 病例数在 y 县缺失 12%,在 x 县缺失 15%。该代码目前只是说明整个数据框中缺少多少个案例编号。假设整个数据框中有 66 个独特的县,我正在寻找 66 个单独的缺失计数。
我正在尝试使用 groupby 来获得结果,但它不起作用。
df2['casenumber'] = df.groupby(by='county').apply(missing_count(df, 'casenumber'))
但这不起作用,我得到“TypeError:'numpy.float64'对象不可调用”。
我究竟做错了什么?
解决方案
您应该重写您的函数,以便它采用系列或关键字变量val
:
# series:
def missing_count(s, var):
percent_missing= s.isnull().sum() * 100 / s
return round(percent_missing,2)
df.groupby('county')['casenumber'].apply(missing_count)
# or keyword `val`
# careful for `KeyError`
def missing_count(d, var=None)
percent_missing= df[var].isnull().sum() * 100 / len(df)
return round(percent_missing,2)
df.groupby('county').apply(missing_count, var='casenumber')
也就是说,您的代码可以编写如下,它应该会更高效:
df['case_number'].isnull().groupby(df['county']).mean()
推荐阅读
- python - PyQt 更改 Widget 父级
- python - 为什么 tf.profiles 会为 flops 返回 none 值?
- c# - 如何在 C# 中检查我的互联网是否超时
- amazon-web-services - AWS 服务器上的 Visual Studio 创建/配置
- r - 知道一个包是在哪个(确切的)R 版本下构建的?
- elixir - 为什么 phoenix liveview 更新/分配消息使客户端 contenteditable 值恢复?
- xslt - 为什么变量在 sub xsl:template 中出错为“document-node()”?
- javascript - node.js/express/ejs 不呈现根页面?
- django - 通过 Django 模板文件进行反向查询
- python - 将 Mysql 连接到 Python 3 时出现错误