Вероятно, есть гораздо более простой / быстрый способ сделать это в Pandas, но, учитывая ваши примерные данные, вот то, что я придумал, что, кажется, работает.Он использует рецепт grouper()
из документов itertools
, чтобы вытащить строки 2 за раз из кадра данных, а затем берет временную дельту и сливается в одну новую строку.
from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
new_rows = []
for a, b in grouper(df.iterrows(), 2):
tdelta = b[1][0] - a[1][0]
aid = a[1][1]
bid = b[1][1]
new_rows.append({'diff': tdelta, 'A': aid, 'B': bid})
new_df = pd.DataFrame(new_rows)
new_df = new_df.reindex(columns=['diff', 'A', 'B'])
Что дает:
>>> print(new_df)
diff A B
0 01:00:00 1 2
1 01:00:00 3 4
2 01:00:00 5 6
... Но приведенное выше решение Диллона гораздо чище и, вероятно, гораздо эффективнее:)