Sumando valores con valores de fila similares

Tengo un conjunto de datos de pandas que se ve así

city difference NY 6 SF 8 LA 8 NY 9 SF 10 

Quiero resumir los valores de la columna de difference función de la columna de la city para que mi conjunto de datos final se vea como

 city difference total difference NY 6 15 NY 9 LA 8 8 SF 10 10 

Lo intenté

 df['total difference'] = df.groupby('city')['difference'].sum() 

pero no funcionó. Incluso intenté ¿Cómo sumr valores de filas particulares en pandas? pero obtuve valores de NaN para la nueva columna. ¡Por favor ayuda!

Creo que necesitas transform :

 df['total difference'] = df.groupby('city')['difference'].transform(sum) print (df) city difference total difference 0 NY 6 15 1 SF 8 18 2 LA 8 8 3 NY 9 15 4 SF 10 18 

Y si es necesario ordenar también la columna:

 df['total difference'] = df.groupby('city')['difference'].transform('sum') df = df.sort_values('city') print (df) city difference total difference 2 LA 8 8 0 NY 6 15 3 NY 9 15 1 SF 8 18 4 SF 10 18 

Me interesaron las diferencias en las funciones y los tiempos son muy similares:

 #[10000000 rows x 2 columns] np.random.seed(100) df = pd.DataFrame(np.random.randint(1000, size=(10000000,2)), columns=['city','difference']) #print (df) In [293]: %timeit (df.groupby('city')['difference'].transform('sum')) 1 loop, best of 3: 570 ms per loop In [294]: %timeit (df.groupby('city')['difference'].transform(sum)) 1 loop, best of 3: 567 ms per loop In [295]: %timeit (df.groupby('city')['difference'].transform(np.sum)) 1 loop, best of 3: 561 ms per loop