Date_range между 2 столбцами - PullRequest
       9

Date_range между 2 столбцами

0 голосов
/ 24 октября 2019

Я немного новичок в Python и Datascience.

У меня есть набор данных с 2 столбцами даты и времени A и B:

                     A                    B
0  2019-03-13 08:12:20  2019-03-13 08:12:25
1  2019-03-15 10:02:18  2019-03-13 10:02:20

Для каждой строки я хочу создатьдиапазон дат в секундах между столбцом A и столбцом B, поэтому в результате я должен получить это:

                    A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25

Я заставил его работать с этим:

import pandas as pd, numpy as np

df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-15 10:02:18"], 'B': ["2019-03-13 08:12:25", "2019-03-13 10:02:20"]})
l=[pd.date_range(start=df.iloc[i]['A'], end=df.iloc[i]['B'], freq='S') for i in range(len(df))]
df1=(pd.DataFrame(l).T)[0]
print(df1)

Но так как у меня естьнапример, строки 1M, слишком много времени для запуска, и я знаю, что это решение на самом деле не самое лучшее, пожалуйста, ребята, покажите мне, как лучше всего это сделать?

1 Ответ

0 голосов
/ 24 октября 2019

Здесь необходим цикл, одно возможное решение с пониманием и выравниванием списка:

l = [x for a, b in zip(df.A, df.B) for x in pd.date_range(a, b, freq='S')]
df1= pd.DataFrame({'A':l})
print(df1)
                    A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25

Другое решение:

df1 = (pd.concat([pd.Series(pd.date_range(r.A, r.B, freq='S')) for r in df.itertuples()])
         .to_frame('A'))
print (df1)
                    A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
...