Python: процент приложений / любой записи для их пользовательского анализа

#python #pandas #numpy #statistics #analysis

#python #pandas #numpy #Статистика #анализ

Вопрос:

Всем добрый день, у меня есть фрейм данных ниже.

 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
  

Я пытаюсь создать список, который учитывает каждое уникальное приложение с учетом процента идентификаторов пользователей, у которых они есть. В качестве примера выходных данных приведена таблица ниже

 Application    Percentage
apple              100
orange             66
pear               66 
grapefruit         66
  

Этот вывод говорит мне, что для каждого пользователя apple отображается в 100 процентах случаев, orange — в 66 процентах случаев. и т.д. и т.п. Но почему-то я не могу заставить это работать.

Мой приведенный ниже код работает, но выдает значение 3.0 в качестве значения.

 dfsearch['Percentage'] = (len(dfsearch.Application.value_counts())/len(dfsearch.UserID.value_counts()))
dfsearch
  

вероятно, это неверно, потому что это не список, но именно поэтому мне нужна помощь 🙂

Ответ №1:

Вы можете начать с удаления дублирующихся записей с помощью 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
  

А затем преобразуйте его в DataFrame:

 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
  

Ответ №2:

Используйте 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