2017-08-14 1 views
1

ich mit etwa 50 Spalten ein Datenrahmen haben, sind einige von ihnen period_start_time, id, speed_throughput usw. Datenrahmen Beispiel:neue Spalten durch Gruppieren und Aggregieren multicolumns in Pandas

id  period_start_time   speed_througput ... 
0 1  2017-06-14 20:00:00    6 
1 1  2017-06-14 20:00:00    10 
2 1  2017-06-14 21:00:00    2 
3 1  2017-06-14 21:00:00    5 
4 2  2017-06-14 20:00:00    8 
5 2  2017-06-14 20:00:00    12 
... 

ich versucht habe, zu gehen Erstellen Sie zwei neue Spalten, indem Sie zwei Spalten (id und period_start_time) gruppieren und avg und min von speed_trhoughput finden. Der Code habe ich versucht:

df['Throughput_avg']=df.sort_values(['period_start_time'],ascending=False).groupby(['period_start_time','id'])[['speed_trhoughput']].max() 
df['Throughput_min'] = df.groupby(['period_start_time', 'id'])[['speed_trhoughput']].min() 

Wie Sie sehen können, gibt es zwei Möglichkeiten, die ich habe versucht, aber nichts funktioniert. Die Fehlermeldung, die ich für beide Versuche erhalten:

TypeError:incompatible index of inserted column with frame index 

Ich nehme an, Sie wissen, was meine ausgegeben werden muss, so dass es keine Notwendigkeit, es zu veröffentlichen.

Antwort

1

Option 1
Verwenden agg in einem groupby und join zur Hauptdatenrahmen

df.join(
    df.groupby(['id', 'period_start_time']).speed_througput.agg(
     ['mean', 'min'] 
    ).rename(columns={'mean': 'avg'}).add_prefix('Throughput_'), 
    on=['id', 'period_start_time'] 
) 

    id period_start_time speed_througput Throughput_avg Throughput_min 
0 1 2017-06-14 20:00:00    6    8.0    6 
1 1 2017-06-14 20:00:00    10    8.0    6 
2 1 2017-06-14 21:00:00    2    3.5    2 
3 1 2017-06-14 21:00:00    5    3.5    2 
4 2 2017-06-14 20:00:00    8   10.0    8 
5 2 2017-06-14 20:00:00    12   10.0    8 

Option 2
Verwenden transform in einem groupby Rahmen anzubringen und verwenden assign die hinzuzufügen neue Spalten

g = df.groupby(['id', 'period_start_time']).speed_througput.transform 
df.assign(Throughput_avg=g('mean'), Throughput_min=g('min')) 

    id period_start_time speed_througput Throughput_avg Throughput_min 
0 1 2017-06-14 20:00:00    6    8.0    6 
1 1 2017-06-14 20:00:00    10    8.0    6 
2 1 2017-06-14 21:00:00    2    3.5    2 
3 1 2017-06-14 21:00:00    5    3.5    2 
4 2 2017-06-14 20:00:00    8   10.0    8 
5 2 2017-06-14 20:00:00    12   10.0    8 
Verwandte Themen