注意:此问题可以与此处的一个现有问题相关联。然而,我的问题提供了一个更具体的例子,我相信它具有更广泛的影响。
考虑我们有一个 pandas 数据框,如下所示:
Questions cnt similarity
0 ABC 1 [1, 2, 3]
1 abc 2 [1, 2, 3]
2 cba 3 [2, 3, 1]
3 abcd 4 [4, 5, 6]
4 dcsa 5 [2, 3, 1]
5 adcd 6 [4, 5, 6]
6 abcd 7 [1, 2, 3]
7 cba 8 [7, 8, 9]
我必须在
cat
列的基础上添加另一列名为 similarity
的列。如果两行具有相同的 similarity
,则将它们归为同一组。以下是预期输出。任何输入都是有价值的。值得一提的是,原始数据集有 1M
行。谢谢。
Questions cnt similarity cat
0 ABC 1 [1, 2, 3] 1
1 abc 2 [1, 2, 3] 1
2 cba 3 [2, 3, 1] 2
3 abcd 4 [4, 5, 6] 3
4 dcsa 5 [2, 3, 1] 2
5 adcd 6 [4, 5, 6] 3
6 abcd 7 [1, 2, 3] 1
7 cba 8 [7, 8, 9] 4
pd.factorize
:
df["cat"] = pd.factorize(df["similarity"].astype(str))[0] + 1
输出:
print(df)
Questions cnt similarity cat
0 ABC 1 [1, 2, 3] 1
1 abc 2 [1, 2, 3] 1
2 cba 3 [2, 3, 1] 2
3 abcd 4 [4, 5, 6] 3
4 dcsa 5 [2, 3, 1] 2
5 adcd 6 [4, 5, 6] 3
6 abcd 7 [1, 2, 3] 1
7 cba 8 [7, 8, 9] 4
一种方法是使用
groupby.ngroup()
:
df['cat'] = df.groupby('similarity').ngroup()+1
Questions cnt similarity cat
0 ABC 1 [1, 2, 3] 1
1 abc 2 [1, 2, 3] 1
2 cba 3 [2, 3, 1] 2
3 abcd 4 [4, 5, 6] 3
4 dcsa 5 [2, 3, 1] 2
5 adcd 6 [4, 5, 6] 3
6 abcd 7 [1, 2, 3] 1
7 cba 8 [7, 8, 9] 4