如何获取 Pandas 中 groupby 对象中每个项目的索引?

Gia*_*nou 6 python pandas

我根据我想要的列在数据帧上使用 groupby,然后我必须获取其组中每个项目的索引。我所说的索引是指,如果一组中有 10 个项目,则索引从 0 到 9,而不是数据帧索引。

我执行此操作的代码如下:

import pandas as pd

df = pd.DataFrame({'A': np.random.randint(0, 11, 10 ** 3), 'B': np.random.randint(0, 11, 10 ** 3), 
                   'C': np.random.randint(0, 11, 10 ** 3), 'D': np.random.randint(0, 2, 10 ** 3)})

grouped_by = df.groupby(["A", "B", "C"])
groups = dict(list(grouped_by))
index_dict = {k: v.index.tolist() for k,v in groups.items()}
df["POS"] = df.apply(lambda x: index_dict[(x["A"], x["B"], x["C"])].index(x.name), axis=1)
Run Code Online (Sandbox Code Playgroud)

这里的数据框只是一个例子。

有没有办法使用grouped_by来实现这一目标?

chr*_*isb 4

这是一个使用cumcount()虚拟变量为每个组生成项目索引的解决方案。它也应该明显更快。

In [122]: df['dummy'] = 0
     ...: df["POS"] = df.groupby(['A','B','C'])['dummy'].cumcount()
     ...: df = df.drop('dummy', axis=1)
Run Code Online (Sandbox Code Playgroud)

正如@unutbu 指出的,使用起来更干净:

df["POS"] = df.groupby(['A','B','C']).cumcount()
Run Code Online (Sandbox Code Playgroud)