Pandas:从列表创建数据框,每个元素都有重复日期

我查看了谷歌和这里试图找到答案,但似乎无法正确地表达它以获得有关这个确切问题的帮助。


我想创建一个数据框,其中有一个名为“部门”的列,其中包含列表中的值,然后对于该列中的每个值,我想要相同的日期时间范围。


清单是:


departments = ['Sales', 'Specialist', 'Purchase', 'HR']

日期范围是( df 是我与原始日期范围不同的数据框。):


pd.date_range(start=df.InvoiceDate.min(), end=df.InvoiceDate.max(), freq='1D')

所以,我尝试了这个,但由于形状的原因它给了我一个错误,我明白只是不知道如何解决它。


df2 = pd.DataFrame(department,(pd.date_range(start=df.InvoiceDate.min(), end=df.InvoiceDate.max(), freq='1D')), columns=['Department',"InvoiceDate"])

期望的结果是这样的:


          Department    InvoiceDate

    0        Sales      2019-03-25

    1        Sales      2019-03-26

    2        Sales      2019-03-27

    ...

    5     Specialist    2019-03-25

    6     Specialist    2019-03-26

    7     Specialist    2019-03-27

    ...

    8      Purchase     2019-03-25

    9      Purchase     2019-03-26

   10      Purchase     2019-03-27

    ...

   11         HR        2019-03-25

   12         HR        2019-03-26

   13         HR        2019-03-27


蛊毒传说
浏览 136回答 2
2回答

慕勒3428872

为此,您可以使用以下代码:声明部门列表并获取范围内的日期列表(最小和最大)departments = ['Sales', 'Specialist', 'Purchase', 'HR']dates = pd.date_range(start=df.InvoiceDate.min(), end=df.InvoiceDate.max(), freq='1D').tolist()你想要一个笛卡尔积,所以使用下面的函数def cartesian_product(data):    index = pd.MultiIndex.from_product(data.values(), names=data.keys())    return pd.DataFrame(index=index).reset_index()cartesian_product({'departments': departments,                   'date': a})

catspeake

您以错误的方式调用 pd.DataFrame() 。此外,作为数据提供的 2 个数组的大小也不同。要解决您可以执行以下操作: departments = ['Sales', 'Specialist', 'Purchase', 'HR'] sizeDates = len(dates) sizeDep = len(departments) departments = departments * sizeDates dates = dates * sizeDep  dates = pd.date_range(start=df.InvoiceDate.min(), end=df.InvoiceDate.max(), freq='1D').tolist() departments = departments * len(dates) data = {'departments': departments,'date': dates} df2 = pd.DataFrame(data)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python