鍍金池/ 問答/Python  iOS/ Python 讀取csv文件的某一列數(shù)據(jù),并定義兩個(gè)pattern,確定變化區(qū)間

Python 讀取csv文件的某一列數(shù)據(jù),并定義兩個(gè)pattern,確定變化區(qū)間

Python 讀取csv文件的某一列數(shù)據(jù),并定義兩個(gè)pattern,[-1, 1, 1] 和 [1, -1, -1]可以確定不同的變化區(qū)間

抓取股票數(shù)據(jù),確定股票的變化區(qū)間。

Date 3D10
2017-9-12 1
2017-9-13 1
2017-9-14 1
2017-9-15 1
2017-9-16 1
2017-9-19 1
2017-9-20 1
2017-9-21 1
2017-9-22 1
2017-9-23 1
2017-9-26 1
2017-9-27 1
2017-9-28 -1
2017-9-29 -1
2017-9-30 1
2017-10-3 1
2017-10-4 1
2017-10-5 1
2017-10-6 1
2017-10-7 1
2017-10-10 1
2017-10-11 1
2017-10-12 1
2017-10-13 1
2017-10-14 1
2017-10-17 1
2017-10-18 1
2017-10-19 1
2017-10-20 1
2017-10-21 1
2017-10-24 1
2017-10-25 1
2017-10-26 1
2017-10-27 1
2017-10-28 1
2017-10-31 1
2017-11-1 1
2017-11-2 1
2017-11-3 1
2017-11-4 1
2017-11-7 1
2017-11-8 1
2017-11-9 1
2017-11-10 1
2017-11-11 1
2017-11-14 -1
2017-11-15 -1
2017-11-16 -1
2017-11-17 -1
2017-11-18 -1
2017-11-21 -1
2017-11-22 1
2017-11-23 1
2017-11-25 1
2017-11-28 1
2017-11-29 1
2017-11-30 1
2017-12-1 1
2017-12-2 1
2017-12-5 1
2017-12-6 1
2017-12-7 1
2017-12-8 1
2017-12-9 1
2017-12-12 1
2017-12-13 1
2017-12-14 1
2017-12-15 1
2017-12-16 1
2017-12-19 1
2017-12-20 1
2017-12-21 1
2017-12-22 1
2017-12-23 1
2017-12-27 1
2017-12-28 1
2017-12-29 1
2017-12-30 1
2018-1-3 1
2018-1-4 1
2018-1-5 1
2018-1-6 1
2018-1-9 1
2018-1-10 1
2018-1-11 1
2018-1-12 1
2018-1-13 1
2018-1-17 1
2018-1-18 1
2018-1-19 1
2018-1-20 1
2018-1-23 1
2018-1-24 1
2018-1-25 1
2018-1-26 1
2018-1-27 1
2018-1-30 1
2018-1-31 1
2018-2-1 -1
2018-2-2 -1
2018-2-3 -1
2018-2-6 -1
2018-2-7 -1
2018-2-8 -1
2018-2-9 -1
2018-2-10 -1
2018-2-13 -1
2018-2-14 -1
2018-2-15 -1
2018-2-16 1
2018-2-17 1
2018-2-21 1
2018-2-22 1
2018-2-23 1
2018-2-24 1
2018-2-27 1
2018-2-28 1
2018-3-1 1
2018-3-2 -1
2018-3-3 -1
2018-3-6 -1
2018-3-7 -1
2018-3-8 -1
2018-3-9 -1
2018-3-10 1
2018-3-13 1
2018-3-14 1
2018-3-15 1
2018-3-16 -1
2018-3-17 -1
2018-3-20 -1
2018-3-21 -1
2018-3-22 -1
2018-3-23 -1
2018-3-24 -1
2018-3-27 -1
2018-3-28 -1
2018-3-29 -1
2018-3-30 -1
2018-4-3 -1
2018-4-4 -1
2018-4-5 -1
2018-4-6 1
2018-4-7 1
2018-4-10 1
2018-4-11 1
2018-4-12 1
2018-4-13 1
2018-4-14 1
2018-4-17 1
2018-4-18 1
2018-4-19 1
2018-4-20 1
2018-4-21 1
2018-4-24 1
2018-4-25 -1
2018-4-26 -1
2018-4-27 -1
2018-4-28 -1
2018-5-1 -1
2018-5-2 -1
2018-5-3 -1
2018-5-4 -1
2018-5-5 -1
2018-5-8 1
2018-5-9 1
2018-5-10 1
2018-5-11 1
2018-5-12 1
2018-5-15 1
2018-5-16 1
2018-5-17 1
2018-5-18 1
2018-5-19 1
2018-5-22 1
2018-5-23 1
2018-5-24 1
2018-5-25 1
2018-5-26 1
2018-5-30 -1
2018-5-31 -1
2018-6-1 -1
2018-6-2 -1
2018-6-5 -1
2018-6-6 1
2018-6-7 1
2018-6-8 1
2018-6-9 1
2018-6-12 1
2018-6-13 1
2018-6-14 1
2018-6-15 1
2018-6-16 1
2018-6-19 -1
2018-6-20 -1
2018-6-21 -1
2018-6-22 -1
2018-6-23 -1
2018-6-26 -1
2018-6-28 -1
2018-6-29 -1
2018-6-30 -1
2018-7-3 -1
2018-7-4 -1
2018-7-6 -1
2018-7-7 1
2018-7-10 1
2018-7-11 1
2018-7-12 1
2018-7-13 1
2018-7-14 1
2018-7-17 1
2018-7-18 1
2018-7-19 1
2018-7-20 1

clipboard.png

期望結(jié)果是:獲取下圖所有綠色和橙色的區(qū)間范圍。如:

clipboard.png

回答
編輯回答
莫小染

我有一個(gè)方法,但我覺得有點(diǎn)復(fù)雜,應(yīng)該還有別的簡便方法,你姑且一看:

import pandas as pd
from io import StringIO 

s = """
Date 3D10
2017-9-12 1
2017-9-13 1
2017-9-14 1
2017-9-15 1
2017-9-16 1
2017-9-19 1
2017-9-20 1
2017-9-21 1
2017-9-22 1
2017-9-23 1
2017-9-26 1
...
2018-7-18 1
2018-7-19 1
2018-7-20 1
"""

df = pd.read_csv(StringIO(s), sep=" ")

df["3D10_shift_1"] = df["3D10"].shift(1)
df["3D10_shift_2"] = df["3D10"].shift(2)
df["m"] = list(zip(df["3D10"], df["3D10_shift_1"], df["3D10_shift_2"]))
df["Date"] = pd.to_datetime(df.Date, format='%Y-%m-%d')

# 第一個(gè)pattern
res1 = [(d, d+pd.Timedelta(days=1), d+pd.Timedelta(days=2)) for d in df[df.m==(-1,1.0,1.0)].Date.dt.date]

# 第二個(gè)pattern
res2 = [(d, d+pd.Timedelta(days=1), d+pd.Timedelta(days=2)) for d in df[df.m==(1,-1.0,-1.0)].Date.dt.date]
2017年4月6日 13:48