我想用分组或聚合的平均值替换熊猫序列中的坏值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