Создание диапазона времени / даты для каждой категории в кадре данных: python / SQL - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть датафрейм со столбцами: ID, Tech, Price и factor (см. Ниже).Я хочу назначить этот диапазон дат / времени каждому идентификатору в этом кадре данных.Соответственно, я создал другой дата-фрейм в соответствии с моими требованиями.Я работал над объединением фреймов данных на основе функции «pandas.merge», которая требует общего ключа между фреймами данных.Мой дата-фрейм datetime не содержит никакой переменной, которая является общей с родительским фреймом данных для выполнения операции слияния между фреймами данных.Как решить эту проблему?

df:
ID      Tech    Price   Factor
100-10A   A     688.3   0.36
100-10B   A     123     0.36
200-11A   A     543     0.34
450-11B   A     688.3   0.34
570-1     B     675     0.31
430-2     B     952     0.28
698-5A    C     52.8    0
129-1     D     177.6   0.08

Я создал фрейм данных datetime (раз), который меняется ежечасно.времена:

import pandas as pd 
a = pd.date_range(start='2010-01-01 00:00:00', end='2010-01-01 6:00:00', freq = 'H')

pd.DataFrame(a):
a:
    0
0   2010-01-01 00:00:00
1   2010-01-01 01:00:00
2   2010-01-01 02:00:00
3   2010-01-01 03:00:00
4   2010-01-01 04:00:00
5   2010-01-01 05:00:00
6   2010-01-01 06:00:00

Как в таком случае добиться отображения даты на кадр данных?Я хочу, чтобы мой кадр данных выглядел так, как показано ниже

Datetime            ID           Tech       Price       Factor
1/1/2010 0:00       100-10A         A       688.3       0.36
1/1/2010 1:00       100-10A         A       688.3       0.36
1/1/2010 2:00       100-10A         A       688.3       0.36
1/1/2010 3:00       100-10A         A       688.3       0.36
1/1/2010 4:00       100-10A         A       688.3       0.36
1/1/2010 5:00       100-10A         A       688.3       0.36
1/1/2010 6:00       100-10A         A       688.3       0.36
1/1/2010 0:00       100-10B         A       123         0.36
1/1/2010 1:00       100-10B         A       123         0.36
1/1/2010 2:00       100-10B         A       123         0.36
1/1/2010 3:00       100-10B         A       123         0.36
1/1/2010 4:00       100-10B         A       123         0.36
1/1/2010 5:00       100-10B         A       123         0.36
1/1/2010 6:00       100-10B         A       123         0.36
1/1/2010 0:00       200-11A         A       543         0.34
1/1/2010 1:00       200-11A         A       543         0.34
1/1/2010 2:00       200-11A         A       543         0.34
1/1/2010 3:00       200-11A         A       543         0.34
1/1/2010 4:00       200-11A         A       543         0.34
1/1/2010 5:00       200-11A         A       543         0.34
1/1/2010 6:00       200-11A         A       543         0.34
1/1/2010 0:00       450-11B         A       688.3       0.34
1/1/2010 1:00       450-11B         A       688.3       0.34
1/1/2010 2:00       450-11B         A       688.3       0.34
1/1/2010 3:00       450-11B         A       688.3       0.34
1/1/2010 4:00       450-11B         A       688.3       0.34
1/1/2010 5:00       450-11B         A       688.3       0.34
1/1/2010 6:00       450-11B         A       688.3       0.34
1/1/2010 0:00       570-1           B       675         0.31
1/1/2010 1:00       570-2           B       675         0.31
1/1/2010 2:00       570-3           B       675         0.31
1/1/2010 3:00       570-4           B       675         0.31
1/1/2010 4:00       570-5           B       675         0.31
1/1/2010 5:00       570-6           B       675         0.31
1/1/2010 6:00       570-7           B       675         0.31

1 Ответ

0 голосов
/ 28 февраля 2019

Нашел решение моей проблемы.Это может быть достигнуто через перекрестное соединение.Поскольку у вас нет ключа для сопоставления, мы временно назначаем ключ каждому из них, если dfs / tables и выполняем слияние между ними для выполнения перекрестного соединения:

def cartesian_product_basic(left, right):
    return (left.assign(key=1).merge(right.assign(key=1), on='key').drop('key', 1))

result = cartesian_product_basic(df, a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...