我正在尝试处理一个类似计数器的计数器,计算一辆车的里程数到计数器之间的差异:
这是输入:
Index, Counter
2016-06-01 13:00:00,225907.9
2016-06-01 14:00:00,225908.9
2016-06-01 15:00:00,225909.9
2016-06-01 16:00:00,225910.9
2016-06-01 17:00:00,225911.9
2016-06-01 18:00:00,225912.9
2016-06-01 19:00:00,225913.9
这是所需的输出:
Index, Counter,Increase
2016-06-01 13:00:00,225907.9,0.0 # by definition for the start of the df
2016-06-01 14:00:00,225908.9,1.0
2016-06-01 15:00:00,225909.9,1.0
2016-06-01 16:00:00,225910.9,1.0
2016-06-01 17:00:00,225910.9,0.0
2016-06-01 18:00:00,225911.9,1.0
2016-06-01 19:00:00,225912.9,1.0
循环当然很简单:(伪代码:这是一个快速复制和粘贴更多列的问题)
for i in range(1,len(df)):
(previous, current)=df.loc[row:row+1, ['Counters'].values]
df.at[i, 'Increase'] = current[0] - previous[0]
但是当然在python中我们'更喜欢'不使用循环。我的问题是可以使用applymap
或map
或类似的方式进行此计算,其中大部分时间它们似乎是一行中的值并返回单个值:如何从中取出值两行并返回一个值?
答案 0 :(得分:0)
目前还不清楚如何根据您的输入获得输出,但是您可以使用diff
进行矢量化,并且对于大型数据集来说会更快:
In [15]:
df['Increase'] = df['Counter'].diff().fillna(0)
df
Out[15]:
Index Counter Increase
0 2016-06-01 13:00:00 225907.9 0.0
1 2016-06-01 14:00:00 225908.9 1.0
2 2016-06-01 15:00:00 225909.9 1.0
3 2016-06-01 16:00:00 225910.9 1.0
4 2016-06-01 17:00:00 225911.9 1.0
5 2016-06-01 18:00:00 225912.9 1.0
6 2016-06-01 19:00:00 225913.9 1.0