我在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
答案 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
transform
当as_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