2014-03-30 111 views
0

選擇特定的行我有以下格式的一些數據:從GROUPBY數據幀

56.00 101.85 52.40 101.85 56.000000 101.850000 1 
56.00 100.74 50.60 100.74 56.000000 100.740000 2 
56.00 100.74 52.10 100.74 56.000000 100.740000 3 
56.00 102.96 52.40 102.96 56.000000 102.960000 4 
56.00 100.74 55.40 100.74 56.000000 100.740000 5 
56.00 103.70 54.80 103.70 56.000000 103.700000 6 
56.00 101.85 53.00 101.85 56.000000 101.850000 7 
56.00 102.22 52.10 102.22 56.000000 102.220000 8 
56.00 101.11 55.40 101.11 56.000000 101.110000 9 
56.00 101.11 54.80 101.11 56.000000 101.110000 10 
56.00 101.85 52.40 101.85 56.000000 101.850000 1 
56.00 100.74 50.60 100.74 56.000000 100.740000 2 
........ 

我需要的是一個特定id(最後一列)中的數據。 隨着numpy我以前做的:

d=loatxt('filename') 
wanted = d[ d[:,6]==id ] 

現在的我學習大熊貓才知,那是pandas.read_csv()真的更快loadtxt()

所以在邏輯上我想知道是否有可能做到與熊貓同樣的過濾(也許它更快)。

我首先想到的是想groupby如下:

p=pd.read_csv('filename', sep= ' ', header=None, names=['a', 'b', 'x', 'y', 'c', 'd', 'id']) 

d = p.groupby(['id']) 
#[ i, g in p.groupby(['id']) if i ==1] # syntax error, why? 

的問題是:是否有一個比較簡單的方法,從假設id==1的行p做選擇?

編輯

試圖提出的解決方案:

%timeit t_1 = n[ n[:,6]==1 ][:,2:4] 
10 loops, best of 3: 60.8 ms per loop 

%timeit t_2 = p[ p['id'] == 1 ][['x', 'y']] 
10 loops, best of 3: 70.9 ms per loop 

似乎numpy在這裏更快一點是Pandas

也就是說,在這種情況下工作的最快方法是: 1)首先用熊貓讀取數據read_csv 2)將數據轉換爲numpy.array 3)而不是工作。

這個結論是否正確?

+0

首先,我覺得不同的是非常小的。所以重要的問題是:對於你和你的應用程序來說最簡單的工作是:numpy還是pandas?你當然可以用pandas讀取數據,然後進一步使用numpy數組,但是如果你喜歡使用命名列,或者使用異構數據,我認爲將數據保存在pandas數據框中可以帶來真正的好處。 – joris

+0

別的,鏈接索引不是真的建議,你也可以這樣做:''p.loc [p ['id'] == 1,['x','y']]'' – joris

回答

1

爲您numpy的你可以做同樣的,剛纔指的它的名字列:

wanted = d[d['id'] == id] 
+0

這真的很明顯! :-)這個想法固定在團體上。無論如何,這看起來不是那麼快的那個numpy版本 – Tengis