为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2023-09-12 17:49:32
我的 csv 中的数据如下所示:staff_id,clock_time,device_id,latitude,longitude1001,2020/9/14 4:43:00,d_1,24.59652556,118.08246441001,2020/9/14 8:34:40,d_1,24.59732974,118.08596311001,2020/9/14 3:33:34,d_1,24.73208312,118.09571971001,2020/9/14 4:17:29,d_1,24.59222786,118.09552751001,2020/9/20 5:30:56,d_1,24.59689407,118.28638061001,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,我该怎么办?
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

您需要使用 , 的组合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


查看完整回答
反对 回复 2023-09-12
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

我相信你需要原始值和移位值之间的绝对差异,比较DataFrame.gt更大:

m1 = df[['latitude','longitude']].diff().abs().gt(0.1)

m2 = df[['latitude','longitude']].shift().diff().abs().gt(0.1)


m = m1 | m2

print (m)

   latitude  longitude

0     False      False

1     False      False

2      True      False

3      True      False

4      True       True

5     False       True


latitude_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]


查看完整回答
反对 回复 2023-09-12
?
MMTTMM

TA贡献1869条经验 获得超4个赞

这应该有效:


import pandas as pd


df_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))



查看完整回答
反对 回复 2023-09-12
  • 3 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信