我使用python计算两列中的行之间的差异。我用一个函数减去第1行到第2行,然后升到平方,然后应用平方根来消除负号。然后该函数移到第2-3行,以此类推,以分隔一行,结果保存在列中。下一步是计算行1到行3的减法,并保持该序列直到值结束。。。为了在行之间建立分隔,我构造了一个移位列表。显然我的单子没问题。我使用的数据如下:
df1
Out[44]:
TRACK_ID POSITION_X POSITION_Y POSITION_T
0 0 1 1 35.36
1 0 2 2 35.52
2 0 3 3 35.68
3 0 4 4 35.84
4 0 1 1 35.36
5 0 4 3 34.88
6 0 2 3 34.40
7 0 6 4 33.92
8 0 4 2 33.44
这是我的输出:
rad
Out[28]:
0 1 2 3 4 5 6 \
0 1.414214 2.828427 4.242641 0.000000 3.605551 2.236068 2.236068
1 1.414214 2.828427 1.414214 2.236068 1.000000 4.472136 4.472136
2 1.414214 2.828427 1.000000 1.000000 3.162278 1.414214 1.414214
3 4.242641 1.000000 2.236068 2.000000 2.000000 NaN NaN
4 3.605551 2.236068 5.830952 3.162278 NaN NaN NaN
5 2.000000 2.236068 1.000000 NaN NaN NaN NaN
6 4.123106 2.236068 NaN NaN NaN NaN NaN
7 2.828427 NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN
7 8
0 3.162278 NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
如何看到第5列和第6列是相同的,然后跳转到第7列中的正确序列
我的全部代码如下:
df1 = df[['TRACK_ID','POSITION_X','POSITION_Y','POSITION_T']].copy()
#Parameter input
N = df1.groupby('TRACK_ID').size()
max_time = N*(0.160)
frames = max_time/N
t_step=frames.item()
data = pd.DataFrame({'N':N,'max_time':max_time,'frames':frames})
print(data)
t=np.linspace(0.160, max_time.item(), N)
def radial(df1, coords=['POSITION_X', 'POSITION_Y']):
tau = t.copy()
shifts = np.divide(tau,t_step).astype(float)
print(shifts)
radials = list()
for i, shift in enumerate(shifts):
diffs = np.array(df1[coords] - df1[coords].shift(-shift))
sqdist = np.square(diffs).sum(axis=1)
r = np.sqrt(sqdist)
radials.append(r)
radial_disp = pd.DataFrame({'radials':radials})
return radials
radial_d = radial(df1, coords=['POSITION_X', 'POSITION_Y'])
radd = pd.DataFrame.from_records(radial_d) #horizontal
rad = radd.transpose() #vertical
当我打印我的班次列表时,一切看起来都很好:
shifts
[ 1. 2. 3. 4. 5. 6. 7. 8. 9.]
所以,我不明白这个问题,提前谢谢
好的,我想我在你的代码中找到了错误
改变一下:
收件人:
应该能解决你的问题
问题是原始的shifts变量是浮动的,当您这样做时:
它输出以下内容:
当将6.9999999991转换为int时,它将变为6而不是7
相关问题 更多 >
编程相关推荐