2016-07-06 82 views
1

我正在进行时间序列分析我有一个包含至少两个索引变量(本例中为ID和Year)的数据集。通过ID和年份分类后:计数/分配群组内的观察群体内的观察多层组?

ID Year Grade 
1 1990 B 
1 1991 B 
1 1991 A 
2 2001 B 
2 2001 C 
2 2001 C 
2 2003 A 

我想通过这些变量组和第一组内分配第二级组的出现的顺序对每个观察。换句话说,我想在下面生成“期间”变量:

ID Year Grade period 
1 1990 B  1 
1 1991 B  2 
1 1991 A  2 
2 2001 B  1 
2 2001 C  1 
2 2001 C  1 
2 2003 A  2 
+0

你应该添加你的答案作为问题的一部分。 – Merlin

回答

2

我发现了一个关于此方法的回合。你的水平变量

full_data = full_data.sort_values(by=['ID','Year'],ascending = [True, True]) 

第一排序创建二进制变量,表示各2级组

full_data['temp'] = (full_data.groupby(['ID','Year']).cumcount() == 0).astype(int) 

在所述第一观察然后每个第一级组内计算出变量的累积和。

full_data['period'] = full_data.groupby(['ID']).cumsum()['temp'] 

如果您不先排序,此答案无效。对Pandas相当不熟悉,我花了一段时间才弄明白这一点。它的工作原理,但我很好奇,如果任何人有一个更简单的解决方案。