给出一个数据框,记录一些书的使用情况:
getUTC___()
我需要得到所有书籍的数量,保留其他列并得到这个:
Name Type ID
Book1 ebook 1
Book2 paper 2
Book3 paper 3
Book1 ebook 1
Book2 paper 2
如何做到这一点?
谢谢!
答案 0 :(得分:48)
您需要以下内容:
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
添加“计数”列,然后调用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
答案 1 :(得分:31)
我认为as_index = False应该可以解决问题。
df.groupby(['Name','Type','ID'], as_index=False).count()
答案 2 :(得分:2)
如果df中有许多列,则可以使用df.groupby(['foo']).agg(...)
,请参见here。使用.agg()
函数,您可以选择不要对操作进行操作的列。如果只想保留它们,请使用.agg({'col1': 'first', 'col2': 'first', ...}
。除了'first'
以外,您还可以应用'sum'
,'mean'
等。