Python 使用数据框中的3列按唯一值查找前5名
我有一个包含5列的数据框。我正在寻找拥有最独特用户的前5所学校 我可以通过喜欢的方式获得前5名的学校,但我正在努力筛选独特的用户。我添加了用户_id.nunique(),但收到一个错误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
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