簡體   English   中英

從熊貓現有數據集中生成新的時間序列索引

[英]Generating new time series index from existing data set in Pandas

我有一個數據框,如下所示

id      start_date  end_date 
3001    1-1-2000    5-1-2000
3849    5-1-2001    8-1-2001
8927    6-1-2006    9-1-2006

我想要的是一個新的數據框,它作為索引具有id和作為列date列,該日期是從start_date到end_date逐月遞增的日期。

index   date
3001    1/1/2000
3001    2/1/2000
3001    3/1/2000
3001    4/1/2000
3001    5/1/2000
3849    5/1/2001
3849    6/1/2001
3849    7/1/2001
3849    7/1/2001
8927    6/1/2006
8927    7/1/2006
8927    8/1/2006
8927    9/1/2006

重新創建您的數據框,

In [39]: df = pd.DataFrame( {"id":[ 3001,3849, 8927] , "start_date": ['1-1-2000','1-5-2001','1-6-2006'], "end_date":['1-5-2000','1-8-2001','1-9-2006']})

設定索引

In [40]: df = df.set_index('id')

遍歷行。

In [41]: newdf = pd.DataFrame()

In [42]: for id, row in df.iterrows(): 
    newdf = pd.concat( [newdf, pd.DataFrame( {"id":id, "date": pd.date_range( start=row.start_date, end=row.end_date, freq='D')}) ], ignore_index=True)
    print id
   ....:     
3001
3849
8927

In [43]: newdf = newdf.set_index('id')

In [44]: newdf
Out[44]: 
           date
id             
3001 2000-01-01
3001 2000-01-02
3001 2000-01-03
3001 2000-01-04
3001 2000-01-05
3849 2001-01-05
3849 2001-01-06
3849 2001-01-07
3849 2001-01-08
8927 2006-01-06
8927 2006-01-07
8927 2006-01-08
8927 2006-01-09

並做了。

我不清楚您的日期格式,是第一天嗎? 還是月初? 您可以在此處查看: 用pandas.to_datetime轉換時指定日期格式


當然,請編輯以獲取其他答案:

In [32]: b = newdf.reset_index().groupby( 'id').date.transform( 
lambda ii : ii.max())

In [33]: b
Out[33]: 
0    2000-01-05
1    2000-01-05
2    2000-01-05
3    2000-01-05
4    2000-01-05
5    2001-01-08
6    2001-01-08
7    2001-01-08
8    2001-01-08
9    2006-01-09
10   2006-01-09
11   2006-01-09
12   2006-01-09
Name: date, dtype: datetime64[ns]

In [37]: newdf['new_col'] = (newdf.date == b).astype(int) 
In [38]: newdf
Out[38]: 
           date  new_col
id                      
3001 2000-01-01        0
3001 2000-01-02        0
3001 2000-01-03        0
3001 2000-01-04        0
3001 2000-01-05        1
3849 2001-01-05        0
3849 2001-01-06        0
3849 2001-01-07        0
3849 2001-01-08        1
8927 2006-01-06        0
8927 2006-01-07        0
8927 2006-01-08        0
8927 2006-01-09        1

我不能以某種方式做:

newdf['new_col'] = newdf.reset_index().groupby('id').date.transform( lambda ii: ii == ii.max())

....不知道為什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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