如何在Pandas中按数据框分组并保留列

eimct9ow  于 2023-02-14  发布在  其他
关注(0)|答案(5)|浏览(520)

给定一个记录一些书籍使用情况的 Dataframe ,如下所示:

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

如何才能做到这一点?
谢谢!

0yg35tkg

0yg35tkg1#

您需要以下内容:

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
klr1opcd

klr1opcd2#

我认为as_index=False应该可以做到这一点。

df.groupby(['Name','Type','ID'], as_index=False).count()
bf1o4zei

bf1o4zei3#

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

f5emj3cl

f5emj3cl4#

最简单的方法
df.groupby(['col1','col1'],as_index=False).count()。使用as_index=False可保留列名。默认值为True。
也可以使用df.groupby(['col_1','col_2']).count().reset_index()

f5emj3cl

f5emj3cl5#

您也可以使用value_counts()

df.value_counts().reset_index(name= 'Count')

输出:

Name   Type  ID  Count
0  Book1  ebook   1      2
1  Book2  paper   2      2
2  Book3  paper   3      1

相关问题