我正在使用一个大型csv文件,该文件具有类似以下内容的信息
id year decade code type
3366 2014 2010 EM Chemical
3366 2014 2010 EM Chemical
3366 2014 2010 EM Chemical
3366 2014 2010 EM Chemical
3366 2014 2010 EM Chemical
427 1972 1970 DR Coastal Storm
337 1972 1970 DR Coastal Storm
337 1972 1970 DR Coastal Storm
我想按“ id”列中唯一身份出现的次数进行排序。我想要的结果看起来像
id year decade code type count
3366 2014 2010 EM Chemical 5
427 1972 1970 DR Coastal Storm 1
337 1972 1970 DR Coastal Storm 2
但是我试图解决像
id year decade code type count
3366 2014 2010 EM Chemical 5
3366 2014 2010 EM Chemical 5
3366 2014 2010 EM Chemical 5
3366 2014 2010 EM Chemical 5
3366 2014 2010 EM Chemical 5
427 1972 1970 DR Coastal Storm 1
337 1972 1970 DR Coastal Storm 1
337 1972 1970 DR Coastal Storm 2
我试图通过尝试做到这一点
df['count']=df.groupby('id').transform('count')
但我不断出错
ValueError: Wrong number of items passed 18, placement implies 1
是否有更好的方法来实现这一目标?
df.groupby(list(df.columns)).size().reset_index().rename(columns={0:'count'})
.size()
将使您计数,但创建一个多级索引.reset_index()
将删除包含在名为0的列中的计数的多级索引.rename(columns = {0:'count'})
将重命名此列以进行计数您可以使用transform,但要确保传递的序列与数据框的长度相同。您可以通过添加['year']
到groupby来做到这一点,但是您的任何列都可以做到:
df['counts'] = df.groupby('id')['year'].transform('count')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句