python - 如何在 Pandas 中查找模式?

标签 python pandas dataframe

使用 pandaspython,我想找到一种模式,其中流的流入比平时大得多,并且在 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

最佳答案

尝试对 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 列 并且还可以尝试 95% Confidence interval 方法会更好.

希望对您有所帮助:)

关于python - 如何在 Pandas 中查找模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937101/

相关文章:

python - 如何使用 Python 替换本文中的冒号?

python - 如何根据参数值 "skip"多功能 python 脚本中的各个函数

python - 同时通过一个函数传递多个数据帧

python - cumsum pandas 达到特定值 - python pandas

r - 如何根据另一列中较大的值过滤行?

python - 学习线程概念

python - 使用余弦球面定律在 Django 中按邻近度过滤邮政编码

python - Pandas/Google Analytics API 身份验证尝试引发了一个奇怪的 python 错误

python - 将包含分组数据的 CSV 导入到 Pandas 数据框中

r - 将一行拆分为多行