首页 > 解决方案 > 如何获得特定类别的平均值并使用对应的中位数明智地估算缺失值类别

问题描述

您好,我有以下数据:

import pandas as pd
import numpy as np

将数据加载到数据框中

X = pd.read_csv('demo.csv')

感兴趣的两列是 Category 和 Totals 列:

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

df.groupby('Category').Totals.median().loc['A']

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

  1. 我需要一次找到所有类别的中位数,而不是一个一个。
  2. Totals然后我需要按相应的类别中位数估算列中的缺失值。

帮助将不胜感激。

标签: pythonpandasgroup-by

解决方案


你可以transformfillna这里使用:

df['Totals'] = df.Totals.fillna(df.groupby('Category').Totals.transform('median'))

或者另一种方式可能是:

df['Totals'] = (df.set_index('Category').Totals
                  .fillna(df.groupby('Category').Totals.median()).values)

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
​

推荐阅读