3 回答
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
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]
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))
添加回答
举报