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

时间:2015-08-14 01:41:52

标签: 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)

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

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

1 个答案:

答案 0 :(得分:2)

这是一个使用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()