簡體   English   中英

Python:將日期范圍重疊到時間序列中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM