从第二个数据帧中的下一个值减去一个数据帧中的值

时间:2015-08-16 22:46:32

标签: python-2.7 pandas dataframe

我有一个由多个数据集组成的数据框(大约146和计数)。我的两个列标有" start_time"和" stop_time,"它代表响应的开始和停止(即响应的总持续时间)。 我需要得到#34;响应时间"或start_time从start_time中的下一个对应值中减去。基本上如果:

start_time = [1,4,7]
stop_time = [2,5,8]

我需要:

stop_time[0] - start_time[1]
stop_time[2] - start_time[3]

为了获得:

iri = [2,2]

我的代码如下所示:

iri_t = []
def grps():
    for grp in lset2_name_grps.groups:

        beg_eng_t = pd.DataFrame([lset2_name_grps.stop_time, lset2_name_grps.start_time], columns=['end_t','beg_t'])


        end_t = [i for i in lset2_name_grps.stop_time]
        beg_t = [i for i in lset2_name_grps.start_time]

        beg_t = np.insert(beg_t, len(beg_t),0)
        end_t = np.insert(end_t, 0,0)

        iri_t.append(np.subtract(end_t, beg_t))

#         for i,j in zip(end_t, beg_t):
#             iri_t.append(np.subtract(i,j))


#         lset2_name_grps['iri'] = iri_t
grps()

基本上,它并没有做任何接近我想要完成的事情,而我唯一得到的是“未实施”和“#34;或者是错误。

2 个答案:

答案 0 :(得分:0)

我认为你的问题(纠正我,如果我错了)最好将两列放在一个数据框中,使用shift来偏移你的一个列,然后进行普通的减法。 / p>

df = pd.DataFrame({'start_time':[1,4,7], 'stop_time':[2,5,8]})
df.stop_time - df.start_time.shift()
Out[5]: 
0   NaN
1     4
2     4
dtype: float64

答案 1 :(得分:0)

这样的事情怎么样:

import pandas as pd

starts = pd.Series([1, 4, 7])
stops = pd.Series([2, 5, 8])
iri_t = [0]

for i in range(1, len(starts)):
    iri_t.append(starts[i] - ends[i-1])

times_df = pd.concat([starts, stops, pd.Series(iri_t)], axis=1)

这将创建以下data_frame:

   0  1  2
0  1  2  0
1  4  5  2
2  7  8  2