python - 对多级组的组内观察进行计数/分配组顺序?

标签 python pandas group-by time-series

我正在进行时间序列分析,我有一个数据集,其中至少包含两个索引变量(在本例中为 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/

相关文章:

python BeautifulSoup 获取特定元素

python - 在 python 中生成重置 token 的最佳方法是什么?

python blpapi安装错误

python - 在 Pandas 中绘图的日期采样/平均

python - 根据列值合并数据框

mysql - Sql 查询获取与标志关联的产品

python - 如何在python中使用sqlalchemy和sqlite增加连接超时

Python - 类似于 VLOOKUP (Excel) 的功能

mysql - UNION ALL 之后的 GROUP BY 不会对结果进行分组

python - Pandas groupby 列并乘以聚合函数中的其他两列