2017-05-10 200 views
0

在下面的示例中,我想首先根據UID和每個TID的TSTAMP進行排序。基於列名熊貓的組數據

在這種情況下,這裏是我產生一個最小的工作例如:

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() 

然而,這並不groupby('UID')的方式要排序。

 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 

像這樣的東西作爲最終結果:

 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 

我是一個學習pandas ..任何幫助將不勝感激。

感謝@jezrael,這裏是最終的解決方案

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 

回答

2

看來你需要sort_values

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 

如果第一列是沒有必要的排序,忽略它:

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

我對結果應該如何看起來更詳細一些.. describe()給了我很多不需要的細節 – tandem

+0

如果需要'ascending = [True,False,True]'或'ascending = [False,False,True]',我不確定在第一列中排序。 – jezrael

+0

有沒有辦法讓一個給定的UID的第一個TSTAMP和同一個UID的最後一個TSTAMP? 例如,對於'〜Mb {':'1494416401082'和'1494416401061' – tandem