python - 如何在 Pandas 中找到模式?
问题描述
使用pandas
and python
,我想找到一种模式,其中流的流入量比平时大得多,并且在 5 天内跟随它的流出量不少于流中流入量的 5%。请参阅下面的数据框。
我希望能够在新列中标记此运动(我们称之为标记)。
想象一下这个数据框有数千行,你想找到一个类似的模式并在整个过程中标记它。
Index date stream
0 2019-01-01 2
1 2019-01-02 0
2 2019-01-03 1
3 2019-01-04 0
4 2019-01-05 3
5 2019-01-06 2
7 2019-01-07 100
8 2019-01-08 0
9 2019-01-09 0
10 2019-01-10 -95
11 2019-01-11 3
12 2019-01-13 0
13 2019-01-14 2
14 2019-01-15 -1
15 2019-01-16 0
16 2019-01-17 2
17 2019-01-18 93
18 2019-01-19 -2
19 2019-01-20 -89
解决方案
尝试做一个rolling averaging
on df['stream']
。
stream = [2, 0, 1, 0, 3, 2, 100, 0, 0, -95, 3, 0, 2, -1, 0, 2, 93, -2, -89]
date = [
'2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05',
'2019-01-06', '2019-01-07', '2019-01-08', '2019-01-09', '2019-01-10',
'2019-01-11', '2019-01-13', '2019-01-14', '2019-01-15', '2019-01-16',
'2019-01-17', '2019-01-18', '2019-01-19', '2019-01-20'
]
df = pd.DataFrame({'date': date, 'stream': stream})
def process(row):
if row['stream'] > 20*row['stream_mean']:
return 1
else:
return 0
df['stream_mean'] = df['stream'].rolling(5).mean()
df['stream_mean'] = df['stream_mean'].shift(periods=1)
df['flag'] = df.apply(process,axis=1)
df
如果您应用Bollinger Band
并创建一个Standard Deviation column
并且也可以尝试一种95% Confidence interval
方法会更好。
希望能帮助到你 :)
推荐阅读
- javascript - 悬停时如何显示每个元素的值
- java - 用 forEach JAVA 打印句子的位置。我在哪里错了?
- eclipse - Eclipse 项目缺少不是依赖项的必需库
- sql-server - 为什么实体框架代码可以在 IIS Express 中连接到 SQL Express,但不能在 IIS 上?
- ios - Flutter video_player 从点击开始重新启动视频
- cron - 用于运行多个作业的通用气流 dag 文件
- wpf - DisplayMemberPath 不适用于具有自定义 ListBoxItem 控件的 ListBox
- codeigniter - 从包括谷歌在内的所有搜索引擎中删除的网站链接
- python - 在 symfit python 模块中使用命名模型来拟合高斯分布
- bash - 试图在 ssh heredoc 中 cd