我正在进行时间序列分析,我有一个数据集,其中至少包含两个索引变量(在本例中为 ID 和年份)。按 ID 和年份排序后:
ID Year Grade
1 1990 89
1 1991 76
1 1991 29
2 2001 99
2 2001 46
2 2001 69
2 2003 95
我想按这些变量进行分组,并将第一组中第二级组的出现顺序分配给每个观察值。换句话说,我想生成下面的“period”变量:
ID Year Grade period
1 1990 89 1
1 1991 76 2
1 1991 29 2
2 2001 99 1
2 2001 46 1
2 2001 69 1
2 2003 95 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 相当缺乏经验,我花了一段时间才弄清楚这一点。它有效,但我很好奇是否有人有更简单的解决方案。
关于python - 对多级组的组内观察进行计数/分配组顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215544/