熊猫-按所有列分组并在原始数据框中标记

时间:2018-08-27 07:28:18

标签: python pandas

我有一个DataFrame,其中的列'Id'是唯一的,而'A', 'B', 'C'等,是

在不同的行中,所有值'A', 'B', 'C'都相同。我想给他们一个组名(从1开始的运行索引)。

例如:

df = pd.DataFrame({"A": [1, 1, 1, 2], "B": [3, 4, 4, 4], "C": [5, 5, 5, 5]})
df
Out[127]: 
   A  B  C
0  1  3  5
1  1  4  5
2  1  4  5
3  2  4  5

将成为

   A  B  C  grp
0  1  3  5    1
1  1  4  5    2
2  1  4  5    2
3  2  4  5    3

我知道我可以对['A', 'B', 'C']进行分组并获得密钥,但是,相比之下,我不得不在未优化的情况下遍历密钥和Dataframe。我无法以最佳方式做到这一点

1 个答案:

答案 0 :(得分:2)

使用GroupBy.ngroup

df['grp'] = df.groupby(['A', 'B', 'C']).ngroup() + 1
print (df)

   A  B  C  grp
0  1  3  5    1
1  1  4  5    2
2  1  4  5    2
3  2  4  5    3

如果列已排序:

df['grp'] = pd.factorize([tuple(x) for x in df.values])[0] + 1