Python 多个独立的数据透视表基于另一列来分隔 excel 个文件

Python multiple separate pivot tables based on another column to separate excel files

我正在尝试为我的 df 中不同列中的每个不同值生成多个单独的数据透视表 table(就像每个数据过滤的不同数据透视表 table)。在实际文件中有数百个 R1,因此试图找到一种方法以某种方式循环此文件以分别生成它们。

如果可能,有没有办法将每个数据透视表发送到单独的 excel 文件

import pandas as pd
df=pd.DataFrame({'Employee':['1','2','3','4','5','6','7','8','9','10','11','12', '13', '14', '15', '16', '17', '18', '19', '20'],
'R1': ['mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'stacey' , 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey'],
'R2':['bill', 'bill', 'bill', 'bill', 'bill', 'chris', 'chris', 'chris', 'jill',  'jill', 'jill', 'tom', 'tom', 'tom', 'tom', 'pete', 'pete', 'pete', 'pete', 'pete']})
df

所以基本上有 1 个 excel 文件用于 mike 的世界,其员工计数为 R2,而 1 excel 文件用于 stacey 的世界,其员工计数为 R2(但在实际数据中将完成数百个 R1)

谢谢!

麦克excel

史黛西excel

虽然在写入 sheet 之前可能有更漂亮的方法来处理数据帧,但这为我提供了您正在寻找的结果。它应该与任意数量的 'R1' 成比例,因为“unique()”提供了 R1 中唯一名称的列表。然后将其分解为您需要的变量,并将其写入给定文件路径上的 sheet。

import pandas as pd
data_jobs2=pd.DataFrame({'Employee':['1','2','3','4','5','6','7','8','9','10','11','12', '13', '14', '15', '16', '17', '18', '19', '20'],
'L2Name': ['mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'mike', 'stacey' , 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey', 'stacey'],
'L3Name':['bill', 'bill', 'bill', 'bill', 'bill', 'chris', 'chris', 'chris', 'jill',  'jill', 'jill', 'tom', 'tom', 'tom', 'tom', 'pete', 'pete', 'pete', 'pete', 'pete']})
values = data_jobs2['L2Name'].unique()
filepath = 'Your\File\Path\Here\File_name.xlsx'
writer = pd.ExcelWriter(filepath, engine='openpyxl')
for i in values:
    series = data_jobs2[data_jobs2['L2Name'] == i].groupby(['L2Name','L3Name'])['Employee'].count().to_frame().reset_index()
    df_to_write = series.pivot(index = 'L2Name', columns='L3Name', values = 'Employee').reset_index().replace({i : 'Count of Employee'}).rename(columns={'L2Name':''}).set_index('')
    df_to_write['Grand Total'] = df_to_write.sum(1)
    df_to_write.to_excel(writer, sheet_name=i)
    display(df_to_write)
    display(series)
writer.save()
writer.close()