【问题标题】:Dataframe panda: add column based on count of group elementDataframe panda:根据组元素的数量添加列
【发布时间】:2022-11-21 23:11:18
【问题描述】:

我有一个像这样的数据框,其中 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

我想获得如下数据框。

| A | B | count0 | count1 

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

我基本上想添加两列(计数 0,计数 1),以便分别计算每组具有相同(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)

【问题讨论】:

    标签: pandas dataframe group-by


    【解决方案1】:

    你想要一个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
    

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多