首页 > 解决方案 > 如何在 groupby() 之后查找非唯一行数

问题描述

我有一个df具有两个特征的数据框:ID_owner, ID_phone,我必须找到:

  1. 有多少人拥有的不仅仅是n手机。
  2. 多个所有者共享的电话,ID_phone拥有一个或多个ID_owner.

为了回答第一个问题,我尝试过:

df.groupby('`ID_owner`')['`ID_phone'].nunique().to_frame()

这似乎不起作用,因为我需要ID_owner在分组后计算每个重复行的数量。我在第二个问题中遇到了同样的问题。

我想知道是否存在pandas针对此类问题的特定方法或功能。

第一个问题的输出应该是一个包含两列的数据框:一列显示 ,ID_owner第二列显示拥有的智能手机数量ID_owner

标签: pythonpandasdataframe

解决方案


尽管您似乎想保留聚合表,但您似乎过早地对表进行了切片。要回答您的第一个问题,以下代码将起作用。

n = 2

(df.groupby('ID_owner').agg({'ID_phone': pd.Series.nunique}).query('ID_phone > @n').shape[0]

要回答您的第二个问题,您可以反转上述查询中的 ID,更改 n,然后选择“ID_phone”列。


推荐阅读