【发布时间】:2019-07-24 21:31:18
【问题描述】:
我正在按如下方式处理 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()])
我得到一个包含 2 列 SiteID 和天数在开始/结束日期范围内的 df。
我可以通过对“ID”执行 pd.merge 来添加颜色/类型,但我认为有一种直接的方法可以在创建 DF 时直接添加颜色和类型列。
我尝试过data = [Row['ID'], Row['Type'], Row['Color']] 或data = Row[['ID', 'Color', 'Type']],但都不起作用。
因此,我应该如何创建我的数据框但直接为整个 366 行的每个项目设置颜色而不需要合并?
每个项目的开始/结束日期之间的所有日子都持续。
期望的输出:
【问题讨论】: