web-dev-qa-db-fra.com

Agrégation sur partition - pandas Dataframe

Je recherche la meilleure façon d'agréger des valeurs basées sur une partition particulière, un équivalent de

SUM(TotalCost) OVER(PARTITION BY ShopName) Earnings  ( SQL server)

Je suis capable de le faire par les étapes suivantes dans Pandas, mais à la recherche d'une approche native qui, j'en suis sûr, devrait exister

TempDF= DF.groupby(by=['ShopName'])['TotalCost'].sum()

TempDF= TempDF.reset_index() 

NewDF=pd.merge(DF , TempDF, how='inner', on='ShopName')

Merci beaucoup d'avoir lu!

16
Ivan KR

Vous pouvez utiliser la méthode pandas transform () pour les agrégations au sein d'un groupe comme "OVER (partition by ...)" dans SQL:

import pandas as pd
import numpy as np

#create dataframe with sample data
df = pd.DataFrame({'group':['A','A','A','B','B','B'],'value':[1,2,3,4,5,6]})

#calculate AVG(value) OVER (PARTITION BY group)
df['mean_value'] = df.groupby('group').value.transform(np.mean)

df:
group   value   mean_value
A       1       2
A       2       2
A       3       2
B       4       5
B       5       5
B       6       5
28
Anton Kargapolov