给出一个数据框,记录一些这样的书的使用:
- Name Type ID
- Book1 ebook 1
- Book2 paper 2
- Book3 paper 3
- Book1 ebook 1
- Book2 paper 2
我需要得到所有书籍的数量,保留其他列,并得到这个:
- Name Type ID Count
- Book1 ebook 1 2
- Book2 paper 2 2
- Book3 paper 3 1
如何才能做到这一点?
谢谢!
解决方法
你想要以下内容:
- In [20]:
- df.groupby(['Name','Type','ID']).count().reset_index()
- Out[20]:
- Name Type ID Count
- 0 Book1 ebook 1 2
- 1 Book2 paper 2 2
- 2 Book3 paper 3 1
在你的情况下,“名称”,“类型”和“ID”列在值中匹配,所以我们可以在这些groupby
上调用count
和reset_index
.
另一种方法是使用transform添加“Count”列,然后调用drop_duplicates:
- In [25]:
- df['Count'] = df.groupby(['Name'])['ID'].transform('count')
- df.drop_duplicates()
- Out[25]:
- Name Type ID Count
- 0 Book1 ebook 1 2
- 1 Book2 paper 2 2
- 2 Book3 paper 3 1