2017-05-10 8 views
0

Im folgenden Beispiel möchte ich zuerst nach UID und dann nach TSTAMP für jede TID sortieren.Gruppendaten basierend auf dem Spaltennamen pandas

In diesem Zusammenhang ist hier ein minimales Arbeitsbeispiel I erzeugt:

df = pd.read_csv(dataset_path, names = ['TID','UID','TSTAMP'], delimiter=';') 
df = df.sort_values(by=['TID'], ascending=[True]) 
print df 
#print df.groupby('UID').describe() 

Dies ist jedoch nicht groupby('UID') die Möglichkeit, es sortieren möge.

 TID UID   TSTAMP 
22267 77 (!?} 1494417075666 
9095 77 U|X^ 1494415815098 
15266 77 ~Mb{ 1494416401082 
15263 77 ~Mb{ 1494416401061 
15255 77 Qh9~ 1494416398799 
15252 77 Qh9~ 1494416398786 
15239 77 xF#u 1494416397542 
15236 77 xF#u 1494416397540 
9105 77 U|X^ 1494415815197 

So etwas wie das Endergebnis:

 TID  UID   TSTAMP 
22267 77 (!?} 1494417075666 
15263 77 ~Mb{ 1494416401061 
15266 77 ~Mb{ 1494416401082 
15252 77 Qh9~ 1494416398786 
15255 77 Qh9~ 1494416398799 
9095 77 U|X^ 1494415815098 
9105 77 U|X^ 1494415815197 
15236 77 xF#u 1494416397540 
15239 77 xF#u 1494416397542 

Ich pandas ein Lernen .. jede Hilfe wird geschätzt.

Dank @jezrael, hier ist die endgültige Lösung

df = pd.read_csv(dataset_path, names = ['TID','UID','TSTAMP'], delimiter=';') 
df = df.sort_values(['TID', 'TSTAMP', 'UID'], ascending=[True, False, True]) 
d = {'min':'TSTAMP-INIT','max':'TSTAMP-FIN'} 
df = df.groupby(['UID','TID'])['TSTAMP'].agg([min, max]).reset_index().rename(columns=d) 

for i, row in df.T.iteritems(): 
    print row 

Antwort

2

Es Sie sort_values brauchen scheint:

df = df.sort_values(['TID', 'TSTAMP', 'UID'], ascending=[True, False, True]) 
print (df) 
     TID UID   TSTAMP 
22267 77 (!?} 1494417075666 
15266 77 ~Mb{ 1494416401082 
15263 77 ~Mb{ 1494416401061 
15255 77 Qh9~ 1494416398799 
15252 77 Qh9~ 1494416398786 
15239 77 xF#u 1494416397542 
15236 77 xF#u 1494416397540 
9105 77 U|X^ 1494415815197 
9095 77 U|X^ 1494415815098 

Wenn die erste Spalte ist nicht notwendig, sortieren, lassen Sie es:

df = df.sort_values(['TSTAMP', 'UID'], ascending=[False, True]) 
print (df) 
     TID UID   TSTAMP 
22267 77 (!?} 1494417075666 
15266 77 ~Mb{ 1494416401082 
15263 77 ~Mb{ 1494416401061 
15255 77 Qh9~ 1494416398799 
15252 77 Qh9~ 1494416398786 
15239 77 xF#u 1494416397542 
15236 77 xF#u 1494416397540 
9105 77 U|X^ 1494415815197 
9095 77 U|X^ 1494415815098 
+0

Ich gab ein bisschen mehr Details darüber, wie das Ergebnis aussehen sollte. Describe() gibt mir viele Details, die für mich nicht notwendig sind – tandem

+0

Ich bin mir nicht sicher über die Sortierung in der ersten Spalte, ob 'aufsteigend = [Wahr, Falsch, Wahr]' oder 'aufsteigend = [Falsch, Falsch, Wahr]'. – jezrael

+0

Gibt es eine Möglichkeit, das erste TSTAMP für eine bestimmte UID und das letzte TSTAMP für die gleiche UID zu erhalten? Zum Beispiel für '~ Mb {': '1494416401082' und' 1494416401061' – tandem

Verwandte Themen