#python #pandas #numpy
#python #pandas #numpy
Вопрос:
У меня есть набор данных, в котором я хотел бы отобразить процент в результате группировки по «типу», а также вычислить сумму двух конкретных столбцов по отдельности.
Данные
free use type date
10 5 A1 1/1/2021
20 1 A1 1/1/2021
40 2 B2 1/1/2021
60 3 B2 1/1/2021
Желаемый
type percent use free date
A1 50 6 30 1/1/2021
B2 50 5 100 1/1/2021
Выполнение
percent = count/total *100
df.groupby(['type, 'date']).sum()
Это дает мне все, кроме процента. Я все еще занимаюсь исследованиями. Любое предложение приветствуется
Ответ №1:
Используйте Series.value_counts
с normalize
для процента от оригинала DataFrame
, а затем используйте Series.map
для агрегированных значений:
df1 = df.groupby(['type', 'date'], as_index=False).sum()
df1['perc'] = df1['type'].map(df['type'].value_counts(normalize=True)).mul(100)
print (df1)
type date free use perc
0 A1 1/1/2021 30 6 50.0
1 B2 1/1/2021 100 5 50.0
Комментарии:
1. Спасибо — что делает нормализация?
2. @Lynn — возвращает проценты.
Ответ №2:
Вы можете попробовать этот подход —
Присоединитесь к следующему объекту серии pandas
percent_series = pd.DataFrame(df.type.value_counts())['type']/len(df)*100
Вывод
B 50.0
A1 50.0
Name: type, dtype: float64