Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据框中的3列按唯一值查找前5名_Python_Pandas - Fatal编程技术网

Python 使用数据框中的3列按唯一值查找前5名

Python 使用数据框中的3列按唯一值查找前5名,python,pandas,Python,Pandas,我有一个包含5列的数据框。我正在寻找拥有最独特用户的前5所学校 我可以通过喜欢的方式获得前5名的学校,但我正在努力筛选独特的用户。我添加了用户_id.nunique(),但收到一个错误 df.groupby('school')['like_id'].count().nlargest(5) 样本数据 school_name Day user_id like_id location_id Tilden HS Mon 1 1

我有一个包含5列的数据框。我正在寻找拥有最独特用户的前5所学校

我可以通过喜欢的方式获得前5名的学校,但我正在努力筛选独特的用户。我添加了用户_id.nunique(),但收到一个错误

      df.groupby('school')['like_id'].count().nlargest(5)
样本数据

   school_name   Day   user_id  like_id  location_id
   Tilden HS     Mon     1        1          10
   South Shore   Tue     2        2          11
   Tilden HS     Mon     1        3          12
   South Shore   Wed     3        4          13
   Brooklyn      Wed     5        5          14
   Canarsie      Thu     7        6          15
   Erasmus       Fri     8        7          16
   Erasmus       Sat     8        8          17
首先,我们可以关注:

df_pivot = df.pivot_table(index='school_name', 
               columns='user_id', 
               values='like_id', 
               aggfunc='count',
               fill_value=0)
它给出了
df_轴

user_id      1  2  3  5  7  8
school_name                  
Brooklyn     0  0  0  1  0  0
Canarsie     0  0  0  0  1  0
Erasmus      0  0  0  0  0  2
South Shore  0  1  1  0  0  0
Tilden HS    2  0  0  0  0  0
然后,要通过唯一用户了解max:

df_pivot.ne(0).sum(1).nlargest(5)
给出:

school_name
South Shore    2
Brooklyn       1
Canarsie       1
Erasmus        1
Tilden HS      1
dtype: int64
school_name
Erasmus        2
South Shore    2
Tilden HS      2
Brooklyn       1
Canarsie       1
dtype: int64
或者通过
像\u id

df_pivot.sum(1).nlargest(5)
给出:

school_name
South Shore    2
Brooklyn       1
Canarsie       1
Erasmus        1
Tilden HS      1
dtype: int64
school_name
Erasmus        2
South Shore    2
Tilden HS      2
Brooklyn       1
Canarsie       1
dtype: int64
我相信你需要:

或者,如果需要按列组合进行分组,并按3列获取唯一值的数量:

s1 = df.groupby(['school_name', 'user_id'])['like_id'].nunique().sum(level=0).nlargest(5)
print (s1)

school_name
Erasmus        2
South Shore    2
Tilden HS      2
Brooklyn       1
Canarsie       1
Name: like_id, dtype: int64