使用pandas map或applymap或类似方法处理数据框中的行对

时间:2016-07-18 10:34:58

标签: pandas

我正在尝试处理一个类似计数器的计数器,计算一辆车的里程数到计数器之间的差异:

这是输入:

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中我们'更喜欢'不使用循环。我的问题是可以使用applymapmap或类似的方式进行此计算,其中大部分时间它们似乎是一行中的值并返回单个值:如何从中取出值两行并返回一个值?

1 个答案:

答案 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