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()
但这并没有产生预期的结果,因为 Week
和 Category
都没有堆叠。
谢谢!
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
我有一个 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()
但这并没有产生预期的结果,因为 Week
和 Category
都没有堆叠。
谢谢!
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