python - 无法使用 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 行的每个项目设置颜色而不需要合并?
它持续到每个项目的开始/结束日期之间的所有日子。
期望的输出:
解决方案
尝试使用带有数据字典的 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()])
推荐阅读
- java - 部署在 Heroku 上的 Quarkus 应用程序出现错误 R10(启动超时)
- java - 使用自引用创建 jpa 实体
- sql - 如何将多维数组中的特定数据存储到变量中
- c - 如何链接以便解析 pthread_getattr_np?
- haskell - Haskell 小游戏:检查迷宫的可解性(更新)
- javascript - URL 解析练习 (JavaScript)
- c - if 语句不接受 strcmp 字符串输入中的输入
- firebase - Firebase-UI Web 与使用 Web SDK 构建自定义 JS
- r - 使用 r googledrive 包创建自定义属性
- kubernetes - Spinnaker 无法从 Artifactory 下载舵图