2016-08-06 53 views
0

我安排在下面的表格數據:[Numpy/Pandas]如何從交易記錄中有效創建面板數據集?

ID,DATE,STATUS 
1,6/20/2011,A 
1,1/14/2013,B 
1,8/1/2016,C 
2,3/1/2005,A 
2,4/30/2005,B 
2,6/30/2010,C 
2,8/20/2010,D 

我想這些交易轉換成非平衡面板年產頻率:

ID,YEAR,STATUS 
1,2011,A 
1,2012,A 
1,2013,B 
1,2014,B 
1,2015,B 
1,2016,C 
2,2005,B 
2,2006,B 
2,2007,B 
2,2008,B 
2,2009,B 
2,2010,D 

所以基本上我想要一個年度系列每個ID它涵蓋了爲該ID所觀察到的第一個到最後一個日期。如果當年有多個記錄,或者如果當年沒有日期,則每年的狀態將是當年觀察到的最後一個狀態,或者是上一次觀察到的狀態。

這是一個很大的數據集,所以一個好的答案需要使用由numpy/pandas提供的有效方法。

回答

2

這裏有一種方法:

import pandas as pd 
df = pd.read_csv('file', parse_dates=['DATE']) 
df = df.set_index('DATE').resample('A').ffill() 
df['YEAR'] = df.index.year 
df = df.sort_values(['ID', 'YEAR']).reset_index(drop=True) 
df 
Out: 
    ID STATUS YEAR 
0 1  A 2011 
1 1  A 2012 
2 1  B 2013 
3 1  B 2014 
4 1  B 2015 
5 1  C 2016 
6 2  B 2005 
7 2  B 2006 
8 2  B 2007 
9 2  B 2008 
10 2  B 2009 
11 2  D 2010 
+0

輝煌!謝謝。 – dlm

+0

看起來這隻適用於日期是唯一的。 – dlm