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

6

我在数据框上使用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)

这里的数据框只是一个示例。
是否有一种方法可以使用“grouped_by”来实现这个目标?
1个回答

4

使用 cumcount() 在虚拟变量上生成每个组的项目索引是一种解决方案。这样做速度应该会显著更快。

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

正如@unutbu所指出的那样,更加简洁的方法是使用:

df["POS"] = df.groupby(['A','B','C']).cumcount()

你能把它们放进矩阵或嵌套列表吗? - Albert Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接