说我有一个数据框,如下所示:
df = pd.DataFrame({'date': pd.date_range(start='2013-01-01',periods=6,freq='M'),'value': [3,3.5,-5,2,7,6.8],'type': ['a','a','b','b']})
df['pct'] = df.groupby(['type'])['value'].pct_change()
输出:
date value type pct
0 2013-01-31 3.0 a NaN
1 2013-02-28 3.5 a 0.166667
2 2013-03-31 -5.0 a -2.428571
3 2013-04-30 2.0 b NaN
4 2013-05-31 7.0 b 2.500000
5 2013-06-30 6.8 b -0.028571
我想替换大于pct
或小于0.2
的{{1}}值,然后将它们替换为groupby -0.2
type
s。 / p>
我尝试通过以下方法解决此问题:首先,将“异常值”替换为附加值mean
,然后将其替换为groupby输出,这就是我所做的:
-999
但是显然,这不是解决此问题的最佳解决方案,并且结果不正确:
df.loc[df['pct'] >= 0.2,'pct'] = -999
df.loc[df['pct'] <= -0.2,'pct'] = -999
df["pct"] = df.groupby(['type'])['pct'].transform(lambda x: x.replace(-999,x.mean()))
预期结果应如下所示:
date value type pct
0 2013-01-31 3.0 a NaN
1 2013-02-28 3.5 a 0.166667
2 2013-03-31 -5.0 a -499.416667
3 2013-04-30 2.0 b NaN
4 2013-05-31 7.0 b -499.514286
5 2013-06-30 6.8 b -0.028571
我做错了什么?再次感谢您的帮助。