我有以下数据框df,它为特定组号指定纬度和经度:
latitude longitude group
0 51.822231 4.700267 1
1 51.822617 4.801417 1
2 51.823235 4.903300 1
3 51.823433 5.003917 1
4 51.823616 5.504467 1
5 51.822231 3.900267 2
6 51.822617 3.901417 2
7 51.823235 3.903300 2
8 51.823433 6.903917 2
9 51.823616 8.904467 2
10 51.822231 1.900267 3
11 51.822617 2.901417 3
12 51.823235 11.903300 3
13 51.823433 12.903917 3
14 51.823616 13.904467 3
在每个组号中,我尝试查找指定值longitude_value = 5.00的'经度'列的上下邻居。每个组“行程”中的所有经度均以df排序(它们在每个组中上升)]
每行我希望上下经度值为5.000000。所需的输出看起来像:
latitude longitude trip
2 51.823235 4.903300 1
3 51.823433 5.003917 1
7 51.823235 3.903300 2
8 51.823433 6.903917 2
11 51.822617 2.901417 3
12 51.823235 11.903300 3
根据这个结果,我想将数据重新排列为:
lat_lo lat_up lon_lo lon_up
0 51.823235 51.823433 4.903300 5.003917
1 51.823235 51.823433 3.903300 6.903917
2 51.822617 51.823235 2.901417 11.903300
请在下面查看我的尝试。在我的方法中很明确。我可以很容易地引入经度值5.00并在索引上切片,但这将使回答问题的第2部分变得复杂。凭借17年的空间工作经验,我迷失了为什么您需要问题第二部分中的结果。请在下面查看我的尝试。
数据
df=pd.read_clipboard()
df
输入点并计算经度差
fn=5.00
df['dif']=(df['longitude']-fn)
df
找出每组中的最小正差异
df1=df[df['dif'] > 0].groupby('group').min().reset_index().reindex()
找出每组中的最小负差异
df2=df[df['dif'] < 0].groupby('group').min().reset_index().reindex()
Append上面的第二个组到第一个成一个df。 这将回答您的问题1
df3=df1.append(df2, ignore_index=True).sort_values(['group','longitude'])
df3
问题2
引入名为status
的列并附加一个模式,3
代表下一个邻居,4
代表上一个邻居
df3['Status']=0
np.put(df3['Status'], np.arange(len(df3)), ['3','4'])
df3.drop(columns=['dif'], inplace=True)
df3
[Rename与lon_lo
和lon_up
的邻居
df3['Status']=np.where(df3['Status']==3,'lon_lo', (np.where(df3['Status']==4,'lon_up',df3['Status'] )))
使用pivot,将数据帧分为lon_lo
和纬度,然后对lon_up
进行相同处理。合理的做法是将latitude
分为两组lo
和up
第一小组休息
df4=df3[df3['Status']=='lon_lo']
result=df4.pivot_table('longitude',['latitude','group'],'Status').reset_index().set_index('group')
第二小组休息
df4=df3[df3['Status']=='lon_up']
result1=df4.pivot_table('longitude',['latitude','group'],'Status').reset_index().set_index('group')
[Merge on index这两个组,同时将latitude
重命名为lo
和up
final=result1.merge(result, left_index=True, right_index=True, suffixes=('_lo','_up'))
final