Dataframe Pandas:根据组元素计数添加列

kzipqqlq  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(160)

我有一个这样的 Dataframe ,其中C列只有0和1

| A | B | C

| 1 | 1 | 1
| 1 | 2 | 0 
| 1 | 2 | 0 
| 1 | 2 | 1 
| 1 | 2 | 1
| 2 | 1 | 0
| 2 | 1 | 0
| 2 | 1 | 0
| 2 | 1 | 1
| 2 | 2 | 1
| 3 | 2 | 1
| 3 | 2 | 1

我想得到一个如下的 Dataframe 。

| A | B | count0 | count1 

| 1 | 1 |    0   |   1
| 1 | 2 |    2   |   2
| 2 | 1 |    3   |   1
| 2 | 2 |    0   |   1
| 3 | 2 |    0   |   2

我基本上想添加两列(count0,count1),以便分别计算具有相同(A,B)的每组行的C列中0和1的数量
我做过

df['count'] = df.groupby( ['A', 'B', 'C'], sort='False')['A'].transform('size')

获得这几乎是我想要的,但我需要根据C值拆分计数列

| A | B | C |count  

| 1 | 1 | 1 |  1  
| 1 | 2 | 0 |  2
| 1 | 2 | 1 |  2  
| 2 | 1 | 0 |  3
| 2 | 1 | 1 |  1
| 2 | 2 | 1 |  1
| 3 | 2 | 1 |  2

有没有更好的方法来做这个任务,或者我只是这样做?考虑到我有数百万行(〈10M)

z0qdvdin

z0qdvdin1#

您需要crosstab

out = (pd.crosstab([df['A'], df['B']], df['C'])
         .add_prefix('count')
         .reset_index().rename_axis(columns=None)
      )

输出量:

A  B  count0  count1
0  1  1       0       1
1  1  2       2       2
2  2  1       3       1
3  2  2       0       1
4  3  2       0       2

相关问题