首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何求出一个特定类别的平均值,并将缺失的值类别用共同响应的中值来计算

如何求出一个特定类别的平均值,并将缺失的值类别用共同响应的中值来计算
EN

Stack Overflow用户
提问于 2020-04-08 06:49:53
回答 2查看 265关注 0票数 0

你好,我有如下数据:

代码语言:javascript
复制
import pandas as pd
import numpy as np

将数据加载到数据帧中

代码语言:javascript
复制
X = pd.read_csv('demo.csv')

感兴趣的两栏是“类别”和“总计”栏:

代码语言:javascript
复制
Category Totals estimates
A        2777    0.43
B        1003    0.26
D         NA     0.65
D        2638    0.17
B         NA     0.74
C        2196    0.13
D        2630    0.91
A         NA     0.39
C        2472    0.51
B        1090    0.12
C         NA     0.64

我可以找到类别A的中位数如下:

代码语言:javascript
复制
df.groupby('Category').Totals.median().loc['A']

为实现以下目标,我需要帮助:

  1. I需要同时找到所有类别的中值,而不是一个接一个地找到所有类别的中值。
  2. ,我需要根据相应的类别中值计算Totals列中缺失的值。

我们会感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-08 06:51:59

您可以在这里使用transformfillna

代码语言:javascript
复制
df['Totals'] = df.Totals.fillna(df.groupby('Category').Totals.transform('median'))

或者另一种方法是:

代码语言:javascript
复制
df['Totals'] = (df.set_index('Category').Totals
                  .fillna(df.groupby('Category').Totals.median()).values)

代码语言:javascript
复制
print(df)

   Category  Totals  estimates
0         A  2777.0       0.43
1         B  1003.0       0.26
2         D  2634.0       0.65
3         D  2638.0       0.17
4         B  1046.5       0.74
5         C  2196.0       0.13
6         D  2630.0       0.91
7         A  2777.0       0.39
8         C  2472.0       0.51
9         B  1090.0       0.12
10        C  2334.0       0.64
​
票数 2
EN

Stack Overflow用户

发布于 2020-04-08 06:51:52

GroupBy.transformmedian一起用于与原始值相同大小的Series,因此可以用Series.fillna替换缺少的值

代码语言:javascript
复制
df.Totals = df.Totals.fillna(df.groupby('Category').Totals.transform('median'))

具有lambda函数的替代解决方案:

代码语言:javascript
复制
df.Totals = df.groupby('Category').Totals.transform(lambda x: x.fillna(x.median()))

代码语言:javascript
复制
print (df)
   Category  Totals  estimates
0         A  2777.0       0.43
1         B  1003.0       0.26
2         D  2634.0       0.65
3         D  2638.0       0.17
4         B  1046.5       0.74
5         C  2196.0       0.13
6         D  2630.0       0.91
7         A  2777.0       0.39
8         C  2472.0       0.51
9         B  1090.0       0.12
10        C  2334.0       0.64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61094832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档