2016-07-06 38 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相當不熟悉,我花了一段時間才弄明白這一點。它的工作原理,但我很好奇,如果任何人有一個更簡單的解決方案。