过滤Pandas数据框

时间:2017-12-26 18:51:52

标签: python pandas dataframe data-analysis

我有这个pandas数据帧:

                     open    high     low   close      volume
TimeStamp                                                      
2016-06-23 10:00:00  586.76  594.00  585.54  589.94  478.176973
2016-06-23 11:00:00  589.94  595.49  588.23  592.63  448.689485
2016-06-23 12:00:00  592.63  592.63    1.50  581.13  527.816891
2016-06-23 13:00:00  581.13  586.33  578.58  580.96  728.424757

正如您所看到的,其中一个值不合适。 所以我想过滤它并将其更改为最后5个值的平均值

有了这个

df['avg']=df['low'].rolling(5).mean().shift()

我明白了

                      open    high     low   close      volume      avg
TimeStamp                                                               
2016-06-23 10:00:00  586.76  594.00  585.54  589.94  478.176973  573.326
2016-06-23 11:00:00  589.94  595.49  588.23  592.63  448.689485  578.438
2016-06-23 12:00:00  592.63  592.63    1.50  581.13  527.816891  583.202
2016-06-23 13:00:00  581.13  586.33  578.58  580.96  728.424757  467.348

现在我想给平均值相同的低值。 过滤器找到“方差”大于5的值。

df.loc[(df['high']/df['low'])>5]['low']


                       open    high  low   close      volume      avg
TimeStamp                                                            
2016-06-23 12:00:00  592.63  592.63  1.5  581.13  527.816891  583.202

但是当我试图给出价值时,它不起作用..

 df.loc[(df['high']/df['low'])>5]['low']=df.loc[(df['high']/df['low'])>5]['avg']

你能帮助我吗?

1 个答案:

答案 0 :(得分:2)

pandas的数据框基于索引,所以你需要的只是

df.loc[(df['high']/df['low'])>5,'low']=df.avg
df
Out[1331]: 
     open    high     low   close      volume     avg
0  586.76  594.00  585.54  589.94  478.176973     NaN
1  589.94  595.49  588.23  592.63  448.689485  585.54
2  592.63  592.63  588.23  581.13  527.816891  588.23
3  581.13  586.33  578.58  580.96  728.424757    1.50