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