2016-08-06 31 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