在 Pandas 中将多列分组为一列

Lol*_*rek 2 python pandas

我有一个与此类似的 DataFrame:

|   | id | Group1 | Group2 | Group3 |
|---|----|--------|--------|--------|
| 0 | 22 | A      | B      | C      |
| 1 | 23 | B      | C      | D      |
| 2 | 24 | C      | B      | A      |
| 3 | 25 | D      | A      | C      |
Run Code Online (Sandbox Code Playgroud)

我想要得到这样的东西:

|   | Group | id_count |
|---|-------|----------|
| 0 | A     |        3 |
| 1 | B     |        3 |
| 2 | C     |        3 |
| 3 | D     |        2 |
Run Code Online (Sandbox Code Playgroud)

基本上对于每个组,我想知道有多少人(id)选择了它。

我知道有pd.groupby(),但它只给出一列的适当结果(如果我给它一个列表,它不会将组 1,2,3 组合在一列中)。

jez*_*ael 5

DataFrame.melt与以下一起使用GroupBy.size

df1 = (df.melt('id', value_name='Group')
         .groupby('Group')
         .size()
         .reset_index(name='id_count'))

print (df1)
  Group  id_count
0     A         3
1     B         3
2     C         4
3     D         2
Run Code Online (Sandbox Code Playgroud)