2016-09-04 3 views
0

У меня есть DataFrame, который имеет 9 столбцов, которые являются закодированными значениями для дня недели (1-7), Недели Года (1-52), Месяца Года (1-12), Time bin (каждые 3 часа), День зарплаты (0,1) и Праздник (0,1) и Сумма (действительное число). Время помещается во временную ячейку, например. 15:00 помещается в 6-й раз, а 7:34 помещается в третий раз.DataFrame Groupby при сохранении исходного DataFrame

Day Week Month Time Salary Holiday Amount 
1 5  2  1  0  0  700.0 
1 5  2  1  0  0  800.0 
3 18  5  7  1  0  90.0 

В принципе, мне нужно сгруппировать данные по первым 6 столбцам и создать новый столбец, который является суммарным значением суммы. Однако эта сумма будет повторяться, так как мне нужно сохранить исходный фрейм. Таким образом, он должен суммировать покупки, которые имеют одинаковые День, Неделя, Месяц, Время, Зарплата и Праздник, т. Е. Сумма в этой группе.

Day Week Month Time Salary Holiday Amount Sum 
1 5  2  1  0  0  700.0 1500.0 
1 5  2  1  0  0  800.0 1500.0 
3 18  5  7  1  0  90.0 90.0 

Я сгруппировал рамку данных по дням, неделям, месяцам, времени, зарплате, празднику и сумме сумм.

temp= features.groupby(by=["Day", "Week", "Month", "Time", "Salary", "Holiday"])["Amount"].sum() 

ответ

1

Вы можете использовать transform вернуть столбец одного и того же размера исходного кадра данных, из the docs:

Метод преобразования возвращает объект, который индексируется один и тот же (тот же размер) как тот, который сгруппирован. Таким образом, переданная функция преобразования должна возвращать результат, который имеет тот же размер, что и групповой кусок.

df['Sum'] = df.groupby(["Day", "Week", "Month", "Time", "Salary", "Holiday"]).transform('sum') 

df  
# Day Week Month Time Salary Holiday Amount Sum 
#0 1 5  2 1  0  0 700 1500 
#1 1 5  2 1  0  0 800 1500 
#2 3 18  5 7  1  0  90 90 
0

Вы можете сбросить индекс температуры, а затем сделать внешнее слияние с оригинальной особенностью dataframe на все столбцы, сгруппированных по.

result = features.merge(temp.reset_index(), on=["Day", "Week", "Month", "Time", "Salary", "Holiday"]) 
Смежные вопросы