【发布时间】:2014-04-26 23:19:42
【问题描述】:
背景:
我有一个带有大约 200k+ 行数据的 pandas 数据框。
<class 'pandas.core.frame.DataFrame'>
Int64Index: 212812 entries, 0 to 212811
Data columns (total 10 columns):
date 212812 non-null values
animal_id 212812 non-null values
lons 212812 non-null values
lats 212812 non-null values
depth 212812 non-null values
prey1 212812 non-null values
prey2 212812 non-null values
prey3 212812 non-null values
dist 212812 non-null values
sog 212812 non-null values
dtypes: float64(9), int64(1), object(1)
对于每个日期,有 1000 个人具有经度/纬度位置。
我想计算每个人的每日距离变化,我已经使用 pyproj.Geod.inv 成功地为 100 个人计算过,但是人口的增加大大减缓了速度。
问题:
是否有一种使用外部类方法(如pyproj.Geod.inv)对 pandas 数据帧执行计算的有效方法?
例程示例:
ids = np.unique(data['animal_id'])
for animal in ids:
id_idx = data['animal_id']==animal
dates = data['date'][id_idx]
for i in range(len(dates)-1):
idx1 = (data['animal_id']==id) & (data['date']==dates[i])
idx2 = (data['animal_id']==id) & (data['date']==dates[i+1])
lon1 = data['lons'][idx1]
lat1 = data['lats'][idx1]
lon2 = data['lons'][idx2]
lat2 = data['lats'][idx2]
fwd_az, bck_az, dist = g.inv(lon1,lat1,lon2,lat2)
data['dist'][idx2] = dist
data['sog'][idx2] = dist/24. #dist/time(hours)
【问题讨论】:
标签: python pandas geospatial