pandas pivot table 如何重新排列列

pandas pivot table how to rearrange columns

我有一个 pandas df,我想用它来构建一个枢轴 table。 这是一个示例 table

Name   Week   Category     Amount

ABC     1     Clothing      50
ABC     1     Food          10
ABC     1     Food          10
ABC     1     Auto          20
DEF     1     Food          10
DEF     1     Services      20

我要创建的枢轴 table 是总结每个名称、每个类别每周的金额。 本质上,我希望得到一个 table 如下:

Name  Week   Clothing   Food   Auto   Services   Total
ABC    1      50         20     20     0          90
DEF    1      0          10     0      20         30

如果某个用户在特定的一周内没有类别值,我将其视为0 总和是行总和。

我尝试了 https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html 中提到的一些选项,但无法正常工作...关于如何实现此目的的任何想法。我用了 df.pivot_table(values=['Amount'], index=['Name','Week','Category'], aggfunc=[np.sum]) 后跟 df.unstack() 但这并没有产生预期的结果,因为 WeekCategory 都没有堆叠。 谢谢!

df_pvt = pd.pivot_table(df, values = 'Amount', index = ['Name', 'Week'], columns = 'Category', aggfunc = np.sum, margins=True, margins_name = 'Total', fill_value = 0
df_pvt.columns.name = None
df_pvt = df_pvt.reset_index()

让我们试试crosstab

out = pd.crosstab(index = [df['Name'],df['Week']],
                  columns = df['Category'],
                  values=df['Amount'],
                  margins=True,
                  aggfunc='sum').fillna(0).iloc[:-1].reset_index()
Category Name Week  Auto  Clothing  Food  Services  All
0         ABC    1  20.0      50.0  20.0       0.0   90
1         DEF    1   0.0       0.0  10.0      20.0   30