[Numpy / Pandas]如何从交易记录中有效地创建面板数据集?

时间:2016-08-06 13:32:09

标签: python pandas numpy

我的数据安排如下:

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提供的有效方法。

1 个答案:

答案 0 :(得分: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