Python pandas:如何根据多列对唯一值进行分组和计数?

新手上路,请多包涵

我有数据农场 df:

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

我想按“id”列分组并根据(名称,数字)对计算唯一值的数量?

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

我试过这个,但它不起作用:

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

原文由 UserYmY 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

您可以将两个 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'})

原文由 stedes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题