用熊猫组的平均值替换坏值



我想用分组或聚合的平均值替换熊猫序列中的坏值negative values(-666)NaNs。示例数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({
'cat': ['A','B','C','A','B','C','A','B','C'],
'val': [np.nan, 10, 4, 5, -666, -666, 15, 20, 10]
})

预期输出:

A 10
B 10
C 4
A 5
B 15
C 5
A 15
B 20
C 10

如何使用分组平均值修复坏值?

您可以使用where来屏蔽不需要的值;然后使用groupby+变换mean:的结果来替换它们

tmp = df['val'].where(lambda x: x>0)
df['val'] = tmp.fillna(tmp.groupby(df['cat']).transform('mean'))

我们也可以使用下面的一个线性得到相同的结果(效率低于上面的线性(:

df['val'] = df['val'].where(lambda x: x>0, df.groupby('cat')['val'].transform(lambda x: x[x>0].mean()))

输出:

cat   val
0   A  10.0
1   B  10.0
2   C   4.0
3   A   5.0
4   B  15.0
5   C   7.0
6   A  15.0
7   B  20.0
8   C  10.0

最新更新