首页 > 解决方案 > 无法使用 pandas DateRange 和多列创建数据框

问题描述

我正在研究一个df,如下所示:

df = pd.DataFrame({'ID': {0: 'S0001', 1: 'S0002', 2: 'S0003'},
 'StartDate': {0: Timestamp('2018-01-01 00:00:00'),
  1: Timestamp('2019-01-01 00:00:00'),
  2: Timestamp('2019-04-01 00:00:00')},
 'EndDate': {0: Timestamp('2019-01-02 00:00:00'),
  1: Timestamp('2020-01-02 00:00:00'),
  2: Timestamp('2020-04-01 00:00:00')}
 'Color': {0: 'Blue', 1: 'Green', 2: 'Red'},
 'Type': {0: 'Small', 1: 'Mid', 2: 'Mid'}})

现在我想在开始日期和结束日期之间创建一个包含 366 行的 df,并且我想为开始日期和结束日期之间的每一行添加颜色、类型、ID。

我正在做以下 whick 效果很好:

OutputDF = pd.concat([pd.DataFrame(data = Row['ID'], index = pd.date_range(Row['StartDate'], Row['EndDate'], freq='1D', closed = 'left'), columns = ['ID']) for index, Row in df.iterrows()])

我得到一个 df,其中包含 2 列 SiteID 和开始/结束日期范围内的天数。

我可以通过在“ID”上执行 pd.merge 来添加颜色/类型,但我认为有一种直接的方法可以在创建 DF 时直接添加列颜色和类型。

我试过了data = [Row['ID'], Row['Type'], Row['Color']],或者data = Row[['ID', 'Color', 'Type']]都不管用。

因此,我应该如何创建我的数据框但直接为整个 366 行的每个项目设置颜色而不需要合并?

当前输出示例: 在此处输入图像描述

它持续到每个项目的开始/结束日期之间的所有日子。

期望的输出:

在此处输入图像描述 谢谢

标签: pythonpandas

解决方案


尝试使用带有数据字典的 pd.DataFrame 构造函数:

 pd.concat([pd.DataFrame({'ID':Row['ID'], 
                          'Color':Row['Color'], 
                          'Type':Row['Type']}, 
                         index = pd.date_range(Row['StartDate'], 
                                               Row['EndDate'], 
                                               freq='1D', 
                                               closed = 'left')) 
            for index, Row in df.iterrows()])

推荐阅读