2017-12-20 2 views
2

Ich habe eine Frage, in diesem Beispiel vereinfacht. Betrachten Sie diese Pandas Datenrahmen, df_a:Groupby einem DataFrame in einen neuen DataFrame mit einem Bereich als Index

df_a=pd.DataFrame([['1001',34.3,'red'],['1001',900.04,'red'],['1001',776,'red'],['1003',18.95,'green'],['1004',321.2,'blue']],columns=['id','amount','name']) 

    id  amount name 
0 1001 34.30 red 
1 1001 900.04 red 
2 1001 776.00 red 
3 1003 18.95 green 
4 1004 321.20 blue 

Ich mag würde diese Datenrahmen GROUPBY durch die Menge in einen neuen Datenrahmen Summieren und erstellen Sie einen neuen ‚arange' artigen Index. Dies sollte das Ergebnis sein, die ich haben möchte:

id  amount 
0 1001 1710.34 
1 1003 18.95 
2 1004 321.20 

Aber meine Bemühungen schaffen eine Serie (ich ein Dataframe als Ergebnis möchte):

df_a.groupby(['id'])['amount'].sum() 

id 
1001 1710.34 
1003  18.95 
1004  321.20 
Name: amount, dtype: float64 

oder einen neuen Index erstellen auf der Basis der id Säule:

pd.DataFrame(df_a.groupby(['id'])['amount'].sum()) 

     amount 
id 
1001 1710.34 
1003 18.95 
1004 321.20 

ich habe auch versucht, den Index Parameter zu übergeben, aber das funktioniert auch nicht:

Hat jemand eine elegante Lösung dafür?

Antwort

3

Sie haben einen Parameter as_index in groupby für diesen

df_a.groupby('id', as_index = False)['amount'].sum() 

Sie erhalten

id amount 
0 1001 1710.34 
1 1003 18.95 
2 1004 321.20 
+0

Danke für Ihre Antworten !! Ein typischer Fall von read-the-manual: - | Entschuldigung, aber ich konnte es nicht finden, während ich nach Index, Re-Index usw. suche. – Bas

1

können Sie versuchen, die folgenden durch Zugabe von to_frame() und reset_index():

new_df = df_a.groupby(['id'])['amount'].sum().to_frame('amount').reset_index() 
print(new_df) 

Ergebnis:

 id amount 
0 1001 1710.34 
1 1003 18.95 
2 1004 321.20 

Wenn Sie nur to_frame() verwenden das heißt mit

df_a.groupby(['id'])['amount'].sum().to_frame('amount')

es wi ll wie folgt auf id Index halten:

 amount 
id   
1001 1710.34 
1003 18.95 
1004 321.20 

andere Weg ist, Index auf Datenrahmen in Ihrem obigen Code zurück:

new_df = pd.DataFrame(df_a.groupby(['id'])['amount'].sum()).reset_index()

Output gleiche sein würde, wie oben:

 id amount 
0 1001 1710.34 
1 1003 18.95 
2 1004 321.20 
+0

Vielen Dank für Ihre Antworten !! Ein typischer Fall von read-the-manual: - | Entschuldigung dafür, aber ich konnte es nicht finden während der Suche nach Index, Re-Index, etc ... – Bas

Verwandte Themen