从Pandas数据框中获取序列

从Pandas数据框中获取序列

问题描述:

我有Pandas数据帧描述GPS数据,其中列表示轨迹索引,点索引(沿轨迹的点位置)和纬度/经度值(为简洁起见,显示为“xx”。从Pandas数据框中获取序列

track point lat lon 
    1  1 xx xx 
    1  2 xx xx 
    1  3 xx xx 
    2  1 xx xx 
    2  2 xx xx 
    2  3 xx xx 
    ... ... .. .. 

我想办法通过track切片,然后排序point。到目前为止,我这样做是在一个循环中,但我不知道这是正确的方式(我想没有,因为它似乎并不高效):

trks = getDataframe() //dataframe is created elsewhere 
tracks = []   //this is what I want: some sequence of individual tracks 
for trk in sorted(set(trks.trk)): 
    track = trks[(trks.track==trk) 
    track.sort(columns='point') 
    tracks.append(track) 

您可以使用groupby

tracks = [grp.sort(['point']) for key, grp in trks.groupby(['track'])] 

例如,

In [236]: trks = pd.read_table('data', sep='\s+') 

In [237]: trks 
Out[237]: 
    track point lat lon 
0  1  2 xx xx 
1  1  3 xx xx 
2  1  1 xx xx 
3  2  1 xx xx 
4  2  3 xx xx 
5  2  2 xx xx 

In [239]: for key, grp in trks.groupby(['track']): 
    .....:  print(grp.sort(['point'])) 
    .....:  
    track point lat lon 
2  1  1 xx xx 
0  1  2 xx xx 
1  1  3 xx xx 
    track point lat lon 
3  2  1 xx xx 
5  2  2 xx xx 
4  2  3 xx xx 

注意,它通常是更有效地把所有的数据在一个数据帧。一旦将DataFrame分解为一个更小的部分列表,那么无论何时您想对所有框架执行某些操作,都必须使用Python循环。这往往会减慢计算。如果您可以找到一种方法将计算表达为适用于DataFrame的整体,那么通常会做得更好。