假设值存在,例如,如何在dataframe中创建另一列" testFinal“,其中df"test"-”df“测试的绝对值为”例如,testFinal的第一个值是2与-> so 8后0.2秒差值的绝对值“,结果是abs(2-8) =6。
我的目标是计算"testFinal“
我不知道是否清楚,下面是一个例子
注:时间戳不是均匀的,因此两个值之间的间隔可能随时间不同而不同。
非常感谢
以下是dataframe的代码
df = pd.DataFrame({'Timestamp':[11.1,11.2,11.3,11.4,11.5,11.6,11.7,11.8,11.9,12.0,12.10],
'test':[2,22,8,4,5,4,5,3,54,23,89],
'testFinal':[6,18,3,0,0,1,49,20,35,np.NaN,np.NaN]})
发布于 2020-06-08 10:09:33
首先,通过使用temp
将Timestamp
列转换为timedelta
获得一个新的临时列,然后将该temp
列设置为dataframe index
,然后创建一个新的列testFinal
,其值作为这个新的索引+ 0.2 seconds
,然后使用Series.map
将testFinal
列映射到来自df['test']
列的值,因此现在testFinal
列中的值应该与test
列D13中的值相对应,然后您可以在testFinal和列中减去这些值以获得所需的结果:
df['temp'] = pd.to_timedelta(df['Timestamp'], unit='s')
df = df.set_index('temp')
df['testFinal'] = df.index + pd.Timedelta(seconds=0.2)
df['testFinal'] = df['testFinal'].map(df['test']).sub(df['test']).abs()
df = df.reset_index(drop=True)
# print(df)
Timestamp test testFinal
0 11.1 2 6.0
1 11.2 22 18.0
2 11.3 8 3.0
3 11.4 4 0.0
4 11.5 5 0.0
5 11.6 4 1.0
6 11.7 5 49.0
7 11.8 3 20.0
8 11.9 54 35.0
9 12.0 23 NaN
10 12.1 89 NaN
发布于 2020-06-08 10:15:59
可以使用numpy
,如下所示。我创建了一个新列test_final
,以便与预期的testFinal
列进行比较。
import numpy as np
test = df.test.values
df['test_final'] = np.abs(test - np.concatenate((test[2:], np.array([np.nan]*2)), axis=0))
print(df)
输出:
Timestamp test testFinal test_final
0 11.1 2 6.0 6.0
1 11.2 22 18.0 18.0
2 11.3 8 3.0 3.0
3 11.4 4 0.0 0.0
4 11.5 5 0.0 0.0
5 11.6 4 1.0 1.0
6 11.7 5 49.0 49.0
7 11.8 3 20.0 20.0
8 11.9 54 35.0 35.0
9 12.0 23 NaN NaN
10 12.1 89 NaN NaN
https://stackoverflow.com/questions/62259143
复制相似问题