首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Pandas中GroupBy数据帧并保留列

如何在Pandas中GroupBy数据帧并保留列
EN

Stack Overflow用户
提问于 2015-07-23 01:01:02
回答 3查看 123.2K关注 0票数 93

给出一个数据帧,记录一些书的使用情况,如下所示:

代码语言:javascript
复制
Name   Type   ID
Book1  ebook  1
Book2  paper  2
Book3  paper  3
Book1  ebook  1
Book2  paper  2

我需要得到所有书的数量,保留其他列,并得到以下内容:

代码语言:javascript
复制
Name   Type   ID    Count
Book1  ebook  1     2
Book2  paper  2     2
Book3  paper  3     1

如何做到这一点?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-23 01:17:59

您需要以下内容:

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 102
EN

Stack Overflow用户

发布于 2016-06-03 06:06:18

我认为as_index=False应该做这件事。

代码语言:javascript
复制
df.groupby(['Name','Type','ID'], as_index=False).count()
票数 95
EN

Stack Overflow用户

发布于 2020-03-31 18:17:15

如果在一个df中有许多列,那么使用df.groupby(['foo']).agg(...)是有意义的,请参见here.agg()函数允许您选择如何处理不想对其应用操作的列。如果您只想保留它们,请使用.agg({'col1': 'first', 'col2': 'first', ...}。除了'first',您还可以应用'sum''mean'等。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31569549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档