python Pandas : How to group by and count unique values based on multiple columns?

标签 python pandas group-by unique

我有数据农场 df:

id name number
1 sam   76
2 sam    8
2 peter  8 
4 jack   2

我想根据“id”列进行分组,并根据 (name,number) 对计算唯一值的数量?

id count(name-number)
1    1
2    2
4    1     

我试过了,但是不行:

df.groupby('id')[('number','name')].nunique().reset_index()

最佳答案

您只需组合两个 groupby 即可获得所需的结果。

import pandas
df = pandas.DataFrame({"id": [1, 2, 2, 4], "name": ["sam", "sam", "peter", "jack"], "number": [8, 8, 8, 2]})
group = df.groupby(['id','name','number']).size().groupby(level=0).size()

第一个 groupby 将计算完整的原始组合集(从而使您要计算的列唯一)。第二个 groupby 将计算您想要的每个列的唯一出现次数(并且您可以使用第一个 groupby 将该列放入索引的事实)。

结果将是一个系列。如果您希望 DataFrame 具有正确的列名(如您在所需结果中所示),您可以使用 aggregate 函数:

group = df.groupby(['id','name','number']).size().groupby(level=0).agg({'count(name-number':'size'})

关于 python Pandas : How to group by and count unique values based on multiple columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134507/

相关文章:

python - 将关键字参数传递给使用位置参数定义的函数时的误导性(?)TypeError

python - 使用 Python/Pandas 创建包含多个工作表的 Excel 文件

python - 有条件地格式化 Python pandas 单元格

python - 如何使用 pandas.Series.str.contains 为包含给定条件的行返回真值

mysql - 对第一个表进行分组并保留第二个表的最高值

sql - 如何使用Group By子句合并两个sql server表?

python - 在 Pandas 中具有后视和前视条件的 Fillna

python - 在同一个 CSV 文件中保存不同大小的多个列/变量

MySQL GROUP BY 优化 - InnoDB 与 MyISAM?

python - 如何过滤私有(private)用户与用户的交互?