我有以下数据框,以研究一年内海底鱼的覆盖距离:
StartPosition FinishPosition PathDistance Time Date
(27777.9, 1944.72) (2783.63, 1941.08) 6.72 13:28:15.56 2023-07-08
(2783.63, 1941.08) (2790.62, 1939.07) 3.22 14:12:19.52 2023-07-08
(2790.62, 1939.07) (2778.02, 1946.28) 5.14 14:55:17.23 2023-07-08
(2778.02, 1946.28) (2783.53, 1943.08) 7.60 15:33:47.27 2023-07-08
(2783.53, 1943.08) (2792.62, 1963.25) 80.21 15:59:23.51 2023-07-08
(2792.62, 1963.25) (2785.83, 1947.77) 2.96 16:31:12.14 2023-07-08
(2785.83, 1947.77) (2756.21, 1933.54) 5.29 18:29:13.35 2023-07-08
(2756.21, 1933.54) (2784.73, 1996.91) 105.32 19:01:45.35 2023-07-08
在进行任何分析之前,我必须从外层过滤我的 Dataframe 。例如,分析的鱼不可能在20分钟内移动超过50米,因此应该删除这些值。
因此,我想创建一个函数来运行我的dataframe的完整性,并根据预定义的时间间隔消 debugging 误的值。例如,如果两个连续点之间的间隔时间〈15 min,PathDistance(m)〉50,我将消除整行。
类似的东西(希望不会太糟!!):
def Filtr (IntervalTime, PathDistance):
time1 = (df.iloc[i]['Time'])
time2 = (df.iloc[i+1]['Time'])
IntervalTime = time2 - time1
if(IntervalTime > 15, PathDistance < 50):
#maintain the row
else:
#remove the row
对不起的脚本,但我仍然是一个初学者在python!
##################################
也许像这样的for loop
更好,但我仍然错过了一些东西:
for i, row in df.iterrows():
time1 = (df.iloc[i]['Time'])
time2 = (df.iloc[i+1]['Time'])
IntervalTime = time2 - time1
PathDistance = (row['PathDistance'])
if IntervalTime < 30 and PathDistance > 100:
distances.drop([row])
1条答案
按热度按时间mznpcxlj1#
为此,你可以使用
df.shift(1)
,这将使你的数据向下移动一个,如果你想将你的数据向上移动一个,你也可以使用df.shift(-1)
。一旦你这样做了,你可以使用numpy的where函数来过滤掉double条件。