pandas dataframe按時間連續性分塊


當時序數據不連續時,需要將連續的數據划分為一塊,基於pandas dataframe的方案如下。

>>> df
  DateAnalyzed       Val
1   2018-03-18  0.470253
2   2018-03-19  0.470253
3   2018-03-20  0.470253
4   2017-01-20  0.485949  # < watch out for this
5   2018-09-25  0.467729
6   2018-09-26  0.467729
7   2018-09-27  0.467729

>>> df.dtypes
DateAnalyzed    datetime64[ns]
Val                    float64
dtype: object



>>> dt = df['DateAnalyzed']
>>> day = pd.Timedelta('1d')
>>> in_block = ((dt - dt.shift(-1)).abs() == day) | (dt.diff() == day)
>>> in_block
1     True
2     True
3     True
4    False
5     True
6     True
7     True
Name: DateAnalyzed, dtype: bool

>>> filt = df.loc[in_block] >>> breaks = filt['DateAnalyzed'].diff() != day >>> groups = breaks.cumsum() >>> groups 1 1 2 1 3 1 5 2 6 2 7 2 Name: DateAnalyzed, dtype: int64 >>> for _, frame in filt.groupby(groups): ... print(frame, end='\n\n') ... DateAnalyzed Val 1 2018-03-18 0.470253 2 2018-03-19 0.470253 3 2018-03-20 0.470253 DateAnalyzed Val 5 2018-09-25 0.467729 6 2018-09-26 0.467729 7 2018-09-27 0.467729

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM