从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的整体,那么通常会做得更好。