给出一个数据帧,记录一些书的使用情况,如下所示:
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如何做到这一点?
谢谢!
发布于 2015-07-23 01:17:59
您需要以下内容:
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在你的例子中,'Name','Type‘和'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发布于 2016-06-03 06:06:18
我认为as_index=False应该做这件事。
df.groupby(['Name','Type','ID'], as_index=False).count()发布于 2020-03-31 18:17:15
如果在一个df中有许多列,那么使用df.groupby(['foo']).agg(...)是有意义的,请参见here。.agg()函数允许您选择如何处理不想对其应用操作的列。如果您只想保留它们,请使用.agg({'col1': 'first', 'col2': 'first', ...}。除了'first',您还可以应用'sum'、'mean'等。
https://stackoverflow.com/questions/31569549
复制相似问题