使用groupby pandas计算行数

时间:2017-05-18 19:50:18

标签: python pandas

我在pandas 0.17中有以下功能:

df['numberrows'] = df.groupby(['column1','column2','column3'], as_index=False)[['column1']].transform('count').astype('int')

但是我今天升级了大熊猫,现在我收到了错误:

  File "/usr/local/lib/python3.4/dist-packages/pandas/core/internals.py",
     

第3810行,插入       提出ValueError('无法插入{},已存在' .format(item))

     

ValueError:无法插入column1,已存在

更新中发生了哪些变化导致此功能不再起作用?

我想按列分组并添加一个包含groupby的数量或列的列。

如果我之前做的不是一个好的功能,那么在获得分组的行数时,另一种分组方式也是受欢迎的。

编辑:

小数据集:

    column1  column2    column3   
 0  test     car1       1           
 1  test2    car5       2         
 2  test     car1       1         
 3  test4    car2       1      
 4  test2    car1       1         

结果将是:

    column1  column2    column3   numberrows
 0  test     car1       1           2
 1  test2    car5       2           1     
 3  test4    car2       1           1
 4  test2    car1       1           1

2 个答案:

答案 0 :(得分:4)

考虑以下方法:

In [18]: df['new'] = df.groupby(['column1','column2','column3'])['column1'] \
                       .transform('count')

In [19]: df
Out[19]:
  column1 column2  column3  new
0    test    car1        1    2
1   test2    car5        2    1
2    test    car1        1    2
3   test4    car2        1    1
4   test2    car1        1    1

<强>更新

In [26]: df.groupby(['column1','column2','column3'])['column1'] \
           .count().reset_index(name='numberrows')
Out[26]:
  column1 column2  column3  numberrows
0    test    car1        1           2
1   test2    car1        1           1
2   test2    car5        2           1
3   test4    car2        1           1

答案 1 :(得分:1)

您的语法很草率,您使用as_index=False transformas_index=False发现column1已经存在时,transform将最终将这些列推回到数据框中......呃哦。但是,由于df.groupby( ['column1','column2','column3'] )['column1'].transform('count').astype('int') 0 2 1 1 2 2 3 1 4 1 Name: column1, dtype: int64 为您处理索引,因此完全没有必要。

df.assign(
    new=df.groupby(
        ['column1','column2','column3']
    )['column1'].transform('count').astype('int')
)

  column1 column2  column3  new
0    test    car1        1    2
1   test2    car5        2    1
2    test    car1        1    2
3   test4    car2        1    1
4   test2    car1        1    1

或制作新专栏

--conf PROP=VALUE