#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