Отображение столбцов даты и времени двух таблиц - PullRequest
0 голосов
/ 02 января 2019

Я создал фрейм данных только со столбцом даты и времени с интервалом в 1 секунду для 1 января 2018 года, как показано в коде ниже.

i = pd.date_range(start='2018-01-01 00:00:00', end='2018-01-01 23:59:00', freq="1S")
ts = pd.DataFrame(index=i)
ts = ts.reset_index()
ts = ts.rename(columns={'index': 'datetime'})`

df1:

    datetime
0   2018-01-01 00:00:00
1   2018-01-01 00:00:01
2   2018-01-01 00:00:02
3   2018-01-01 00:00:03
4   2018-01-01 00:00:04
5   2018-01-01 00:00:05
6   2018-01-01 00:00:06
7   2018-01-01 00:00:07
8   2018-01-01 00:00:08
9   2018-01-01 00:00:09
10  2018-01-01 00:00:10
11  2018-01-01 00:00:11
12  2018-01-01 00:00:12
13  2018-01-01 00:00:13
14  2018-01-01 00:00:14
15  2018-01-01 00:00:15
16  2018-01-01 00:00:16
17  2018-01-01 00:00:17
18  2018-01-01 00:00:18
19  2018-01-01 00:00:19
20  2018-01-01 00:00:20
21  2018-01-01 00:00:21
22  2018-01-01 00:00:22
23  2018-01-01 00:00:23
24  2018-01-01 00:00:24
25  2018-01-01 00:00:25
26  2018-01-01 00:00:26
27  2018-01-01 00:00:27
28  2018-01-01 00:00:28
29  2018-01-01 00:00:29`

У меня есть другой фрейм данных со столбцом даты и времени, другие столбцы

df2:

    datetime                a       b        c         d        e  
0   2018-01-01 00:00:04     0.9                                    
1   2018-01-01 00:00:06             0.6      0.7                   
2   2018-01-01 00:00:09     0.5              0.7       0.8         
3   2018-01-01 00:00:16             2.3      3.6       4.9      5.0
4   2018-01-01 00:00:17     0.9     3.5      5.5                   
5   2018-01-01 00:00:23     0.1     0.6      0.0       1.7         
6   2018-01-01 00:00:29     2.7     5.5      4.3                   `

Теперь япытаюсь отобразить столбцы даты и времени df1 и df2 с помощью внешнего соединения pandas, и я хотел бы, чтобы мой ожидаемый результат выглядел как

    datetime                a       b       c     d      e
0   2018-01-01 00:00:00
1   2018-01-01 00:00:01
2   2018-01-01 00:00:02
3   2018-01-01 00:00:03
4   2018-01-01 00:00:04     0.9
5   2018-01-01 00:00:05
6   2018-01-01 00:00:06             0.6      0.7
7   2018-01-01 00:00:07
8   2018-01-01 00:00:08
9   2018-01-01 00:00:09     0.5              0.7   0.8
10  2018-01-01 00:00:10
11  2018-01-01 00:00:11
12  2018-01-01 00:00:12
13  2018-01-01 00:00:13
14  2018-01-01 00:00:14
15  2018-01-01 00:00:15
16  2018-01-01 00:00:16             2.3      3.6   4.9   5.0
17  2018-01-01 00:00:17     0.9     3.5      5.5
18  2018-01-01 00:00:18
19  2018-01-01 00:00:19
20  2018-01-01 00:00:20
21  2018-01-01 00:00:21
22  2018-01-01 00:00:22
23  2018-01-01 00:00:23     0.1     0.6      0.0   1.7
24  2018-01-01 00:00:24
25  2018-01-01 00:00:25
26  2018-01-01 00:00:26
27  2018-01-01 00:00:27
28  2018-01-01 00:00:28
29  2018-01-01 00:00:29     2.7     5.5      4.3              `

, но мои выходные данные выглядели так

    datetime                a       b        c         d        e
0   2018-01-01 00:00:00
1   2018-01-01 00:00:01
2   2018-01-01 00:00:02
3   2018-01-01 00:00:03
4   2018-01-01 00:00:04
5   2018-01-01 00:00:05
6   2018-01-01 00:00:06
7   2018-01-01 00:00:07
8   2018-01-01 00:00:08
9   2018-01-01 00:00:09
10  2018-01-01 00:00:10
11  2018-01-01 00:00:11
12  2018-01-01 00:00:12
13  2018-01-01 00:00:13
14  2018-01-01 00:00:14
15  2018-01-01 00:00:15
16  2018-01-01 00:00:16
17  2018-01-01 00:00:17
18  2018-01-01 00:00:18
19  2018-01-01 00:00:19
20  2018-01-01 00:00:20
21  2018-01-01 00:00:21
22  2018-01-01 00:00:22
23  2018-01-01 00:00:23
24  2018-01-01 00:00:24
25  2018-01-01 00:00:25
26  2018-01-01 00:00:26
27  2018-01-01 00:00:27
28  2018-01-01 00:00:28
29  2018-01-01 00:00:29  
30  2018-01-01 00:00:04     0.9                                    
31  2018-01-01 00:00:06             0.6      0.7                   
32  2018-01-01 00:00:09     0.5              0.7       0.8         
33  2018-01-01 00:00:16             2.3      3.6       4.9      5.0
34  2018-01-01 00:00:17     0.9     3.5      5.5                   
35  2018-01-01 00:00:23     0.1     0.6      0.0       1.7         
36  2018-01-01 00:00:29     2.7     5.5      4.3                   `

КодЯ использую для этой операции:

test = pandas.merge(df1, df2, on = ['datetime'], how= 'outer')

Я не совсем уверен, как решить эту проблему, и я был бы признателен, если бы я мог получить некоторую помощь.

1 Ответ

0 голосов
/ 02 января 2019

Сохраняйте ts с указателем даты и времени и используйте Reindex в качестве @Scott Boston, упомянутого в комментариях,

i = pd.date_range(start='2018-01-01 00:00:00', end='2018-01-01 23:59:00', freq="1S")
ts = pd.DataFrame(index=i)

df['datetime'] = pd.to_datetime(df['datetime'])
df.set_index('datetime').reindex(ts.index)


                    a   b   c   d   e
2018-01-01 00:00:00 NaN NaN NaN NaN NaN
2018-01-01 00:00:01 NaN NaN NaN NaN NaN
2018-01-01 00:00:02 NaN NaN NaN NaN NaN
2018-01-01 00:00:03 NaN NaN NaN NaN NaN
2018-01-01 00:00:04 0.9             
2018-01-01 00:00:05 NaN NaN NaN NaN NaN
2018-01-01 00:00:06     0.6 0.7     
2018-01-01 00:00:07 NaN NaN NaN NaN NaN
2018-01-01 00:00:08 NaN NaN NaN NaN NaN
2018-01-01 00:00:09 0.5     0.7 0.8 
2018-01-01 00:00:10 NaN NaN NaN NaN NaN
2018-01-01 00:00:11 NaN NaN NaN NaN NaN
2018-01-01 00:00:12 NaN NaN NaN NaN NaN
2018-01-01 00:00:13 NaN NaN NaN NaN NaN
2018-01-01 00:00:14 NaN NaN NaN NaN NaN
2018-01-01 00:00:15 NaN NaN NaN NaN NaN
2018-01-01 00:00:16     2.3 3.6 4.9 5.0
2018-01-01 00:00:17 0.9 3.5 5.5     

Вариант 2: concat

pd.concat([ts, df.set_index('datetime')], axis = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...