如何在 Python pandas 中使用 df.groupby() 标记每个组? [重复]

问题描述 投票:0回答:2

注意:此问题可以与此处的一个现有问题相关联。然而,我的问题提供了一个更具体的例子,我相信它具有更广泛的影响。

考虑我们有一个 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

python-3.x pandas dataframe
2个回答
3
投票

IIUC,你可以使用

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

2
投票

一种方法是使用

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
© www.soinside.com 2019 - 2024. All rights reserved.