2016-08-10 5 views
2

Ich habe einen Pandas Datenrahmen wie folgt:Pandas: set Spalte gleich gruppiert Summe einer anderen Spalte

variable  Total_Beneficiaries gender_text age_group 
0 MC_OLD_18>F>5  1534 Female 5 - 18 
1 MC_OLD_18>M>5  1651 Male 5 - 18 
2 MC_OLD_F>0<=1  192  Female 0 - 1 
3 MC_OLD_F>18   2079 Female 18 - 60 
4 MC_OLD_F>=60  171  Female Over 60 
5 MC_OLD_F_Child<5 593  Female 1 - 5 
6 MC_OLD_M>0<=1  264  Male 0 - 1 
7 MC_OLD_M>18   1892 Male 18 - 60 
8 MC_OLD_M>=60  106  Male Over 60 
9 MC_OLD_M_Child<5 602  Male 1 - 5 

ich eine Spalte hinzufügen möchten age_group_totals, dass die Summe von Total_Beneficiaries über jede age group sein wird. Für die ersten beiden Zeilen wäre der Wert 3185.

Bisher habe ich das getan, indem Sie einen neuen Datenrahmen mit den Summen zu schaffen und wieder auf den ursprünglichen Zusammenführung wie folgt:

total_by_age = izmir_agg[['age_group','Total_Beneficiaries']].groupby('age_group').agg({'Total_Beneficiaries':np.sum}).reset_index().rename(columns={'Total_Beneficiaries':'age_group_totals'}) 
izmir_agg = izmir_agg.merge(total_by_age,how='left',on='age_group') 

Dies scheint klobig und ich frage mich, ob es einen Weg gibt, um Fügen Sie diese Spalte direkt hinzu, ohne den separaten Datenrahmen zu erstellen. Ich habe das versucht:

izmir_agg['age_group_totals'] = izmir_agg.groupby('age_group')['Total_Beneficiaries'].sum().tolist() 

Aber es funktioniert nicht, weil es eine Liste der falschen Länge zurückgibt. Irgendwelche Tipps, wie Sie das in einem Schritt erreichen?

Antwort

1

Versuchen:

izmir_agg['agg_totals'] = izmir_agg.groupby('age_group').Total_Beneficiaries.transform('sum') 
izmir_agg 

enter image description here

Verwandte Themen