2016-07-23 13 views
3

Hallo ich in dieser Frage leite, wo meine Datenquelle Ereignisse wie folgt aussieht:GROUPBY Aggregate Methode zurückkehrt NaN immer

event_id    device_id   timestamp longitude latitude 
0   1  29182687948017175 2016-05-01 00:55:25  121.38  31.24 
1   2 -6401643145415154744 2016-05-01 00:54:12  103.65  30.97 
2   3 -4833982096941402721 2016-05-01 00:08:05  106.60  29.7 

ich zu einer Gruppe bin versucht, die Ereignisse durch die device_id und dann die Summe/Mittelwert erhalten/std der Variable über jedes Ereignis mit diesem device_id:

events['latitude_mean'] = events.groupby(['device_id'])['latitude'].aggregate(np.sum) 

Aber mein Output ist immer:

event_id    device_id   timestamp longitude latitude 
0   1  29182687948017175 2016-05-01 00:55:25  121.38  31.24 
1   2 -6401643145415154744 2016-05-01 00:54:12  103.65  30.97 
2   3 -4833982096941402721 2016-05-01 00:08:05  106.60  29.70 
3   4 -6815121365017318426 2016-05-01 00:06:40  104.27  23.28 
4   5 -5373797595892518570 2016-05-01 00:07:18  115.88  28.66 

    latitude_mean 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
4   NaN 

Was mache ich falsch, um den Rückgabewert für jede Zeile als NaN zu erhalten?

Antwort

2

Sie pandas.core.groupby.GroupBy.transform(aggfunc) Methode verwenden, die aggfunc für alle Zeilen in jeder Gruppe gilt:

In [32]: events['latitude_mean'] = events.groupby(['device_id'])['latitude'].transform('sum') 

In [33]: events 
Out[33]: 
    event_id   device_id   timestamp longitude latitude latitude_mean 
0   1 29182687948017175 2016-05-01 00:55:25  121.38  31.24   62.55 
1   2 29182687948017175 2016-05-30 12:12:12  777.77  31.31   62.55 
2   3 -6401643145415154744 2016-05-01 00:54:12  103.65  30.97   64.30 
3   4 -6401643145415154744 2016-01-01 11:11:11  111.11  33.33   64.30 

Here you may find some usage examples

Erläuterung:, wenn Sie Gruppe Ihre DF - als Ergebnis haben Sie in der Regel eine Reihe Es enthält weniger Zeilen und einen anderen Index, so dass Pandas nicht wissen, wie man es anordnet, wenn es einer neuen Spalte zugewiesen wird, und als Ergebnis haben Sie NaNs:

so, wenn Sie versuchen, es zu einer neuen Spalte zuweisen, tut Pandas etwas wie folgt aus:

In [36]: events['nans'] = pd.Series([1,2], index=['a','b']) 

In [38]: events[['event_id','nans']] 
Out[38]: 
    event_id nans 
0   1 NaN 
1   2 NaN 
2   3 NaN 
3   4 NaN 

Daten:

In [30]: events 
Out[30]: 
    event_id   device_id   timestamp longitude latitude 
0   1 29182687948017175 2016-05-01 00:55:25  121.38  31.24 
1   2 29182687948017175 2016-05-30 12:12:12  777.77  31.31 
2   3 -6401643145415154744 2016-05-01 00:54:12  103.65  30.97 
3   4 -6401643145415154744 2016-01-01 11:11:11  111.11  33.33 
+1

PRs für große Dokumentation (oder auch nur eine minimale docstring :-)) ist immer willkommen! – joris

+0

@joris, ja, fair genug ... :) – MaxU

Verwandte Themen