如何判断dataframe中任意连续行的差异大于0.1?

我的 csv 中的数据如下所示:


staff_id,clock_time,device_id,latitude,longitude

1001,2020/9/14 4:43:00,d_1,24.59652556,118.0824644

1001,2020/9/14 8:34:40,d_1,24.59732974,118.0859631

1001,2020/9/14 3:33:34,d_1,24.73208312,118.0957197

1001,2020/9/14 4:17:29,d_1,24.59222786,118.0955275

1001,2020/9/20 5:30:56,d_1,24.59689407,118.2863806

1001,2020/9/20 7:26:05,d_1,24.58237852,118.2858955

我想找到连续两行的经度或纬度之差大于0.1的任何行,然后将连续两行的行索引放入列表中。


从我的数据来看,第2行(24.59732974)、第3行(24.73208312)、第4行(24.59222786)的纬度差大于0.1,第4行(118.0955275)、第5行(118.2863806)的经度差大于0.1。


我想将第2,3,4行的索引放入一个列表中latitude_diff_list,并将第4,5行的索引放入另一个列表中longitude_diff_list,我该怎么办?



蓝山帝景
浏览 92回答 3
3回答

慕尼黑5688855

您需要使用 , 的组合diff()来检查与下一行或上一行的绝对差是否大于 0.1,然后获取这些行的索引(我知道您实际上想要索引,而不是描述性行号,即从 0 开始的索引)。您可以执行此操作的一种方法是:latitude_diff_list = df.index[(abs(df['latitude'].diff()) > 0.1) | (abs(df['latitude'].diff(-1)) > 0.1)].tolist() longitude_diff_list = df.index[(abs(df['longitude'].diff()) > 0.1) | (abs(df['longitude'].diff(-1)) > 0.1)].tolist()如果您希望行号从 1 开始(例如[i+1 for i in latitude_diff_list]) ,则可以将其偏移 +1

吃鸡游戏

我相信你需要原始值和移位值之间的绝对差异,比较DataFrame.gt更大:m1 = df[['latitude','longitude']].diff().abs().gt(0.1)m2 = df[['latitude','longitude']].shift().diff().abs().gt(0.1)m = m1 | m2print (m)   latitude  longitude0     False      False1     False      False2      True      False3      True      False4      True       True5     False       Truelatitude_diff_list = df.index[m['latitude']].tolist()print (latitude_diff_list)[2, 3, 4]longitude_diff_list = df.index[m['longitude']].tolist()print (longitude_diff_list)[4, 5]

MMTTMM

这应该有效:import pandas as pddf_ex = pandas.read_csv('ex.csv', sep=',')latitude_diff_list, longitude_diff_list = [], []for idx,row in df_ex[1:].iterrows():    if abs(row['latitude'] - df_ex.loc[idx-1, 'latitude']) > 0.1:        latitude_diff_list.extend([idx-1, idx])    if abs(row['longitude'] - df_ex.loc[idx-1, 'longitude']) > 0.1:        longitude_diff_list.extend([idx-1, idx])latitude_diff_list, longitude_diff_list = list(set(latitude_diff_list)), list(set(longitude_diff_list))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python