我有一个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。我无法以最佳方式做到这一点
答案 0 :(得分:2)
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