首页 > 解决方案 > 为数据框中的每个类别创建日期时间范围:python/SQL

问题描述

我有一个包含列的数据框:ID、技术、价格和因素(见下文)。我想将此日期时间范围分配给此数据框中的每个“ID”。因此,我根据我的要求创建了另一个日期时间数据框。我一直致力于基于“pandas.merge”函数合并数据帧,该函数需要数据帧之间的公共键。我的日期时间数据框不包含任何与父数据框通用的变量来执行数据框之间的合并操作。如何解决这个问题?

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

我创建了一个每小时变化的日期时间数据框(次)。次:

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

标签: python-3.xpandasdatetimedataframejoin

解决方案


找到了我的问题的解决方案。这可以通过交叉连接来实现。由于没有匹配的键,我们暂时为 dfs/ 表中的每个表分配一个键,并在两者之间执行合并以执行交叉连接:

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)

推荐阅读