[英]Python: Overlapping date ranges into time series
我的數據集要大得多,所以我對其進行了簡化。
我想將 dataframe 轉換為時間序列。
我堅持的一點:
我有重疊的日期范圍,我在一個較大的日期范圍內有一個較小的日期范圍,如第 0 行和第 1 行所示,其中第 1 行和第 2 行在第 0 行的日期范圍內。
df:
date1 date2 reduction
0 2016-01-01 - 2016-01-05 7.0
1 2016-01-02 - 2016-01-03 5.0
2 2016-01-03 - 2016-01-04 6.0
3 2016-01-05 - 2016-01-12 10.0
我希望 output 看起來如何:
date1 date2 reduction
0 2016-01-01 2016-01-02 7.0
1 2016-01-02 2016-01-03 5.0
2 2016-01-03 2016-01-04 6.0
3 2016-01-04 2016-01-05 7.0
4 2016-01-05 2016-01-06 10.0
5 2016-01-06 2016-01-07 10.0
6 2016-01-07 2016-01-08 10.0
7 2016-01-08 2016-01-09 10.0
8 2016-01-09 2016-01-10 10.0
9 2016-01-10 2016-01-11 10.0
10 2016-01-11 2016-01-12 10.0
我准備了兩列具有最小和最大日期的連續數據,並從原始 DF 運行更新。
import pandas as pd
import numpy as np
import io
data='''
date1 date2 reduction
0 2016-01-01 2016-01-05 7.0
1 2016-01-02 2016-01-03 5.0
2 2016-01-03 2016-01-04 6.0
3 2016-01-05 2016-01-12 10.0
'''
df = pd.read_csv(io.StringIO(data), sep=' ', index_col=0)
date_1 = pd.date_range(df.date1.min(), df.date2.max())
date_2 = pd.date_range(df.date1.min(), df.date2.max())
df2 = pd.DataFrame({'date1':date_1, 'date2':date_2, 'reduction':[0]*len(date_1)})
df2['date2'] = df2.date2.shift(-1)
df2.dropna(inplace=True)
for i in range(len(df)):
df2['reduction'][(df2.date1 >= df.date1.iloc[i]) & (df2.date2 <= df.date2.iloc[i])] = df.reduction.iloc[i]
df2
date1 date2 reduction
0 2016-01-01 2016-01-02 7
1 2016-01-02 2016-01-03 5
2 2016-01-03 2016-01-04 6
3 2016-01-04 2016-01-05 7
4 2016-01-05 2016-01-06 10
5 2016-01-06 2016-01-07 10
6 2016-01-07 2016-01-08 10
7 2016-01-08 2016-01-09 10
8 2016-01-09 2016-01-10 10
9 2016-01-10 2016-01-11 10
10 2016-01-11 2016-01-12 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.