过滤 pandas 数据框 [英] Filter Pandas Data frame

查看:58
本文介绍了过滤 pandas 数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个熊猫数据框:

 打开高价低价收盘价
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()

我明白了

 打开高低关闭成交量平均
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 ['高'] / df ['低'])> 5] ['低'] 


$ b开盘高低平仓成交量平均
时间戳
2016-06 -23 12:00:00 592.63 592.63 1.5 581.13 527.816891 583.202

但是当我尝试给出值时,就行不通了。 )> 5] ['low'] = df.loc [(df ['high'] / df ['low'])> 5] ['avg']

你能帮我吗?

解决方案

pandas'数据框基于索引,因此您只需要

  df.loc [(df ['high'] / df [ ''low'])> 5,'low'] = df.avg 
df
Out [1331]:
开盘高低平仓成交量
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


I have this pandas dataframe:

                     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

As you can see one of the values is not ok. So I want to filter it and change it to the mean of the last 5 values

With this

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

I get this

                      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

And now I want to give to the low the same value of avg. The filter finds value that has a "variance" bigger than 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

But when I try to give the value, it doesn't work..

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

Can you help me?

解决方案

pandas' dataframe is base on index, so what you need is just

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

这篇关于过滤 pandas 数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆