Pandas 分组后填充熊猫中的NaN值
这个问题与通常填充NaN值略有不同 假设我有一个数据帧,其中我按某个类别分组。现在,我想通过使用该组的平均值来填充一列的NaN值,但是来自不同的列。 让我举一个例子:Pandas 分组后填充熊猫中的NaN值,pandas,dataframe,group-by,Pandas,Dataframe,Group By,这个问题与通常填充NaN值略有不同 假设我有一个数据帧,其中我按某个类别分组。现在,我想通过使用该组的平均值来填充一列的NaN值,但是来自不同的列。 让我举一个例子: a = pd.DataFrame({ 'Occupation': ['driver', 'driver', 'mechanic', 'teacher', 'mechanic', 'teacher', 'unemployed', 'driver', 'mechanic', 'teacher'], 'salary': [100
a = pd.DataFrame({
'Occupation': ['driver', 'driver', 'mechanic', 'teacher', 'mechanic', 'teacher',
'unemployed', 'driver', 'mechanic', 'teacher'],
'salary': [100, 150, 70, 300, 90, 250, 10, 90, 110, 350],
'expenditure': [20, 40, 10, 100, np.nan, 80, 0, np.nan, 40, 120]})
a['diff'] = a.salary - a.expenditure
Occupation salary expenditure diff
0 driver 100 20.0 80.0
1 driver 150 40.0 110.0
2 mechanic 70 10.0 60.0
3 teacher 300 100.0 200.0
4 mechanic 90 NaN NaN
5 teacher 250 80.0 170.0
6 unemployed 10 0.0 10.0
7 driver 90 NaN NaN
8 mechanic 110 40.0 70.0
9 teacher 350 120.0 230.0
因此,在上述情况下,我想在支出中填写NaN值,如下所示:
工资-各组的平均值(差异)
如何使用pandas实现这一点?您可以使用所需的值创建新系列,
groupby.transform
并使用更新目标列
假设您想按职业分组
a['mean_diff'] = a.groupby('Occupation')['diff'].transform('mean')
a.expenditure.mask(
a.expenditure.isna(),
a.salary - a.mean_diff,
inplace=True
)
输出
Occupation salary expenditure diff mean_diff
0 driver 100 20.0 80.0 95.0
1 driver 150 40.0 110.0 95.0
2 mechanic 70 10.0 60.0 65.0
3 teacher 300 100.0 200.0 200.0
4 mechanic 90 25.0 NaN 65.0
5 teacher 250 80.0 170.0 200.0
6 unemployed 10 0.0 10.0 10.0
7 driver 90 -5.0 NaN 95.0
8 mechanic 110 40.0 70.0 65.0
9 teacher 350 120.0 230.0 200.0
它给出了一个错误:TypeError:update()得到了一个意外的关键字参数“overwrite”。我已经更新了df创建代码,您现在可以对其进行测试。它正在估算支出的平均值,而不是差异。没问题,您可以动态创建该
mean_diff
,而不是创建新列,所以你不必在看到我在试图用那个特定点的工资来填补它之后就放弃——这对那个群体来说意味着不同。我可能在帖子中的措辞不正确,让我来编辑一下。