Python: процент приложений / любой записи к их анализу пользователя - PullRequest
0 голосов
/ 22 марта 2019

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 22 марта 2019

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

Использование 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
...