在 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