我有一个具有两个功能的数据框df
:ID_owner
,ID_phone
,我必须找到:
n
个电话。ID_phone
有一个或多个ID_owner
。为了回答第一个问题,我尝试了:
df.groupby('`ID_owner`')['`ID_phone'].nunique().to_frame()
似乎不起作用,因为我需要在分组后计算每个ID_owner
的重复行数。我在第二个问题中遇到了同样的问题。
我想知道pandas
中是否存在针对此类问题的特定方法或功能。
第一个问题的输出应为包含两列的数据框:一列显示ID_owner
,第二列显示ID_owner
拥有的智能手机数量。
答案 0 :(得分:1)
尽管您似乎想保留聚合表,但您似乎过早地对表进行了切片。为了回答您的第一个问题,以下代码将起作用。
n = 2
(df.groupby('ID_owner').agg({'ID_phone': pd.Series.nunique}).query('ID_phone > @n').shape[0]
要回答第二个问题,您可以颠倒上述查询中的ID,更改n,然后选择“ ID_phone”列。
答案 1 :(得分:0)
df1.groupby('ID_owner').agg({'ID_phone': 'unique'}).reset_index()
或者您可以使用以下方式
df1.groupby('User_owner').apply(lambda x:x.zipcode.unique()).reset_index()
这将为您提供输出:
User_owner zipcode
0 Dave [34567]
1 Donald [34353]
2 Jae [12345]
3 Shankar [23456, 22222]
但值得一提的是,您可以使用独特的功能:
df1.groupby('ID_owner').agg({'ID_phone': 'nunique'}).reset_index().rename(columns = {'zipcode':'count'})
或
df1.groupby('User_owner').apply(lambda x:x.zipcode.nunique()).reset_index(name ='count')
这将导致
User_owner count
0 Dave 1
1 Donald 1
2 Jae 1
3 Shankar 2