Множественные агрегации по столбцам с использованием Pandas

#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