python - 如何在 python 中的 groupby 中向聚合中添加函数?
问题描述
我正在尝试通过聚合之间的其他数学运算来获取 groupby 统计信息
我试过了
...agg({
'id':"count",
'repair':"count",
('repair':"count")/('id':"count")
})
yr id repair 2016 37 27 2017 53 28
分组后,我可以通过
gr['repair']/gr['id']*100
yr 2016 0.73 2017 0.53
如何在 groupby 中获得这种类型的计算?
解决方案
考虑一个返回聚合数据集的自定义函数:
def agg_func(g):
g['id'] = g['id'].count()
g['repair'] = g['repair'].count()
g['repair_per_id'] = (g['repair'] / g['id']) * 100
return g.aggregate('max') # CAN ALSO USE: min, max, mean, median, mode
agg_df = (df.groupby(['group'])
.apply(agg_func)
.reset_index(drop=True)
)
使用种子随机数据进行演示:
import numpy as np
import pandas as pd
data_tools = ['sas', 'stata', 'spss', 'python', 'r', 'julia']
np.random.seed(8192019)
random_df = pd.DataFrame({'group': np.random.choice(data_tools, 500),
'id': np.random.randint(1, 10, 500),
'repair': np.random.uniform(0, 100, 500)
})
# RANDOMLY ASSIGN NANs
random_df['repair'].loc[np.random.choice(random_df.index, 75)] = np.nan
# RUN AGGREGATIONS
agg_df = (random_df.groupby(['group'])
.apply(agg_func)
.reset_index(drop=True)
)
print(agg_df)
# group id repair repair_per_id
# 0 julia 79 70 88.607595
# 1 python 89 74 83.146067
# 2 r 82 69 84.146341
# 3 sas 74 66 89.189189
# 4 spss 77 69 89.610390
# 5 stata 99 84 84.848485
推荐阅读
- javascript - 从另一个数组聚合和平均一个数组
- css - HTML 音频控件 - 如何从默认音频播放器中删除 3 个点?
- dockerfile - DL4006 警告:在 RUN 之前设置 SHELL 选项 -o pipefail,其中包含管道
- mongodb - 如何在 MongoDB 聚合管道中将对象数组转换为嵌套对象
- python - 为什么 tkinter 按钮在条目下时会被推开?
- docker - 需要帮助使用 nginx 代理 docker 为 LAMP 堆栈设置证书链
- django - django live reload 不适用于第二个 docker-compose 文件
- javascript - 如何使用 nodejs 读取 worldedit .schem 文件
- database - 无法在 Synapse Studio 中删除无服务器数据库
- visual-c++ - 基于 WebView2 的 ActiveX 控件和拦截 WM_LBUTTONDBLCLK