Я пытаюсь создать столбец, отображающий общий объем продаж на «ClientId».
Клиент может появляться в моем наборе данных несколько раз, поэтому я хочу, чтобы значение TotalSales
в новом столбце было одинаковым для каждого клиента.
Я пытался сделать группу двумя разными способами, но вывод неверен, я не знаю почему, это должен быть простой расчет Вот что я пробовал:
df['TotalSales'] = df.groupby('ClientId')['Sales'].apply(lambda x: x.astype(int) / x.astype(int).sum())
df['TotalSales'] = df.groupby('ClientId')['Sales'].sum().reset_index()
Пример набора данных
dataset = {'ClientId': [10,20,20,20,10,5,3,7,5,20,12,5,3,20,5,8,10,9,7,20,21,5,3,10],
'Sales': [100,50,25,30,40,50,200,600,20,40,100,20,50,400,250,300,125,75,90,10,225,550,450,55]}
df = pd.DataFrame(data=dataset)
Кто-нибудь знает, как я могу это решить?
Заранее спасибо за вашу помощь!
Килли, вы группируете, поэтому количество строк на выходе не будет соответствовать количеству строк в фрейме данных df.
И, кстати, если вам нужно среднее значение, вы можете сделать это: series = df.groupby('ClientId')['Sales'].apply(np.mean) и --> import numpy as np
Ах вот почему! Спасибо! Я не знал о transform
df['TotalSales'] = df['Sales'].groupby(df['ClientId']).transform('sum')
df['TotalSales'] = df.groupby('ClientId')['Sales'].transform('sum')
.