下午好,我有一个数据框架。
UserId Application
1 apple
1 orange
1 apple
1 pear
2 apple
2 orange
2 pear
2 grapefruit
3 apple
3 grapefruit
3 apple
1 apple
我正在尝试创建一个列表,该列表将每个唯一应用程序都计入拥有它们的用户ID的百分比。作为输出的一个示例,表在下面
Application Percentage
apple 100
orange 66
pear 66
grapefruit 66
此输出告诉我,对于每个用户,Apple出现在100%的时间中,橙色出现了66%的时间。等等,但是我无法使它起作用。
我下面的代码有效,但产生3.0作为值。
dfsearch['Percentage'] = (len(dfsearch.Application.value_counts())/len(dfsearch.UserID.value_counts()))
dfsearch
这可能是不正确的,因为它不是列表,但这就是为什么我需要帮助:)
您可以从使用drop_duplicates
删除重复记录开始,然后致电value_counts
,除以唯一用户的数量,然后乘以100:
x = df.drop_duplicates()['Application'].value_counts() / len(df['UserId'].unique()) * 100
x
输出:
apple 100.000000
pear 66.666667
grapefruit 66.666667
orange 66.666667
Name: Application, dtype: float64
然后将其转换为数据框:
x.astype(int).to_frame('Percentage').rename_axis('Application').reset_index()
输出:
Application Percentage
0 apple 100
1 pear 66
2 grapefruit 66
3 orange 66
使用groupby()
nunique()
:
dfsearch.groupby("Application").UserID.nunique()/dfsearch.UserID.nunique()
#Application
#apple 1.000000
#grapefruit 0.666667
#orange 0.666667
#pear 0.666667
#Name: UserId, dtype: float64