2017-01-28 5 views
1

Ich habe ein großes 2-dimensionalen Datenrahmen wie folgt aus: Datum, user_id, val1, val2Mit Wörterbuch für Datenrahmen Aggregation

Wie ich brauche komplexe Funktionen für jeden User_id zu berechnen, ich folgendes:

for x in user_id_list : 
    dfi= df[ user_id= xx]  
    user_dict[x]['Newmycolname']= my_fun(dfi) 
    user_dict[x]['Newmycolname2']= my_fun2(dfi) 

# map the user_dict to df after 

Dies ist nicht sehr effizient, aber sehr flexibel, da ich jede Art der Funktion auf dem Sub-df (dfi) berechnen kann. Auch kann der Code parallel leicht werden .... auf Kosten schnell zu sein ...

Gibt es eine Möglichkeit, die Schleife für von einem Pandas Anfrage grouby.agg und die Schaffung neuer Spaltennamen zu ersetzen?

Antwort

1

Ja, können Sie pandas.DataFrame.groupby und pandas.DataFrame.apply auf jede Gruppe mit Umstellung auf pandas.Series verwenden:

>>> df.groupby('user_id') 
     .apply(lambda x: pd.Series(data=[my_fun(x), my_fun2(x)], index=['Newmycolname', 'Newmycolname2'])) 
     Newmycolname Newmycolname2 
user_id        
1     3.5   17.0 
2     6.0   20.0 

Ohne Lambda-Funktion, nur besser verstehen zu geben, was los ist:

>>> def worker(x): 
...  d = [my_fun(x), my_fun2(x)] 
...  i = ['Newmycolname', 'Newmycolname2'] 
...  return pd.Series(data=d, index=i) 
... 
>>> df.groupby('user_id').apply(worker) 
     Newmycolname Newmycolname2 
user_id        
1     3.5   17.0 
2     6.0   20.0 
+1

Sie antworten sofort nach Ich sagte ihre Frage war verwirrend ;-) – piRSquared

+0

@piRSquared danke, ich musste zuerst meine Pandas Fähigkeiten auffrischen - leider verbringe ich vor kurzem nicht viel Zeit mit Python. –

Verwandte Themen