我有数据农场 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/