我有一个由多个数据集组成的数据框(大约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;或者是错误。
答案 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