在 python 中将多索引 df 转换为排序的 xlsx
Transforming multiindex df into sorted xlsx in python
长期reader,第一次海报。我一直在为两个项目做一些时间跟踪,使用 pandas 按项目和日期对数据进行分组,并希望将其填充到按日期排序的客户的现有 Excel 模板中( y 轴)和项目(x 轴)。但我很难过。我一直在努力将多索引数据帧转换为排序的 xlsx 文件。
我要排序的示例数据
|Date | Project | Hours |
|-----------|---------------------------|---------|
|2022-05-09 |Project 1 | 5.50|
|2022-05-09 |Project 1 | 3.75|
|2022-05-11 |Project 2 | 1.50|
|2022-05-11 |Project 2 | 4.75|
etc.
所需模板
|Date |Project 1|Project 2|
|-----------|---------|---------|
|2022-05-09 | 5.5| 3.75|
|2022-05-11 | 4.75| 1.5|
etc...
到目前为止,我已经尝试使用插入日期的 openpyxl 进行非常基本的迭代,但我不知道如何
a) 重新排列 pandas 中的数据,以便我可以简单地插入它或
b) 如何在给定日期和项目的 openpyxl 中有条件地写入
# code grouping dates and projects
df = df.groupby(["Date", "Project"]).sum("Hours")
r = 10 # below the template headers and where I would start inserting time tracked
for date in df.index:
sheet.cell(row=r, column=1).value = date
r+=1
我在 Whosebug 上搜索了答案,但一无所获。感谢您提供的任何帮助。
我认为您的数据样本不正确。第 2 行,而不是 2022-05-09 |Project 1|3.75
,应该是 2022-05-09 |Project 2|3.75
。与第4行相同。
据我了解,您的数据在 long-format 中,您的输出是 wide-format。在这种情况下,pd.pivot_table
可以提供帮助:
pd.pivot_table(data=df, columns='name', index='year', values='hours').reset_index()
df.pivot_table(index='Date', columns='Project', values='Hours')
Date Project1 Project2
2022-05-09 5.5 3.75
2022-05-11 4.75 1.5
长期reader,第一次海报。我一直在为两个项目做一些时间跟踪,使用 pandas 按项目和日期对数据进行分组,并希望将其填充到按日期排序的客户的现有 Excel 模板中( y 轴)和项目(x 轴)。但我很难过。我一直在努力将多索引数据帧转换为排序的 xlsx 文件。
我要排序的示例数据
|Date | Project | Hours |
|-----------|---------------------------|---------|
|2022-05-09 |Project 1 | 5.50|
|2022-05-09 |Project 1 | 3.75|
|2022-05-11 |Project 2 | 1.50|
|2022-05-11 |Project 2 | 4.75|
etc.
所需模板
|Date |Project 1|Project 2|
|-----------|---------|---------|
|2022-05-09 | 5.5| 3.75|
|2022-05-11 | 4.75| 1.5|
etc...
到目前为止,我已经尝试使用插入日期的 openpyxl 进行非常基本的迭代,但我不知道如何
a) 重新排列 pandas 中的数据,以便我可以简单地插入它或
b) 如何在给定日期和项目的 openpyxl 中有条件地写入
# code grouping dates and projects
df = df.groupby(["Date", "Project"]).sum("Hours")
r = 10 # below the template headers and where I would start inserting time tracked
for date in df.index:
sheet.cell(row=r, column=1).value = date
r+=1
我在 Whosebug 上搜索了答案,但一无所获。感谢您提供的任何帮助。
我认为您的数据样本不正确。第 2 行,而不是 2022-05-09 |Project 1|3.75
,应该是 2022-05-09 |Project 2|3.75
。与第4行相同。
据我了解,您的数据在 long-format 中,您的输出是 wide-format。在这种情况下,pd.pivot_table
可以提供帮助:
pd.pivot_table(data=df, columns='name', index='year', values='hours').reset_index()
df.pivot_table(index='Date', columns='Project', values='Hours')
Date Project1 Project2
2022-05-09 5.5 3.75
2022-05-11 4.75 1.5