Python 如何按Pandas中的数据帧分组并保留列
给定一个数据框,记录一些书籍的使用情况,如下所示:Python 如何按Pandas中的数据帧分组并保留列,python,pandas,Python,Pandas,给定一个数据框,记录一些书籍的使用情况,如下所示: 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 如何做到这一点
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
在您的例子中,“Name”、“Type”和“ID”列在值中匹配,因此我们可以在这些值上调用,然后单击
另一种方法是使用transform
添加“Count”列,然后调用drop\u 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
我认为as_index=False应该可以解决这个问题
df.groupby(['Name','Type','ID'], as_index=False).count()
如果df中有许多列,那么使用
df.groupby(['foo']).agg(…)
是有意义的,请参阅。.agg()
函数允许您选择如何处理不希望对其应用操作的列。如果您只想保留它们,可以使用.agg({'col1':'first','col2':'first',…}
。而不是'first'
,您还可以应用'sum'
,'mean'
和其他方法。这似乎可行,但如果我们有更多的列(如我在其他数据框架中所做的那样),这不会影响性能吗?而且,这不是很直观。这里的问题是分组将减少信息量,因此不一定能一次性生成所需的df,我已更新了我的答案,以说明如何分两步完成,这更容易理解。这是最简单的答案,适用于其他摘要统计数据。