简体   繁体   English

Pandas pivot 表,排序值

[英]Pandas pivot table, sort values

I am trying to create a pivot table in Pandas.我正在尝试在 Pandas 中创建一个 pivot 表。

df_pivot = df_final.groupby('bm').apply(lambda sub: sub.pivot_table(
    index=['Utm_campaign', 'Time'],
    values=['Cost', 'Install', 'Show', 'Link_cliks', 'Reg', 'Ftd'],
    aggfunc=np.sum,
    margins=True,
    margins_name='Total'
))

# Calculation
df_pivot = df_pivot.assign(Instal_cost = df_pivot.Cost/df_pivot.Install)
df_pivot = df_pivot.assign(Reg_cost = df_pivot.Cost/df_pivot.Reg)
df_pivot = df_pivot.assign(FTD_cost = df_pivot.Cost/df_pivot.Ftd)
df_pivot = df_pivot.assign(CTR = df_pivot.Link_cliks/df_pivot.Show*100)

# Replace Inf
df_pivot.replace([np.inf, -np.inf, np.nan], 0, inplace=True)
df_pivot = df_pivot.drop(['Link_cliks', 'Show'], axis=1)

df_pivot = df_pivot.sort_values(by = ["bm", 'Utm_campaign'], axis = 0, ascending=[True, False])

I've attached an image from Excel as it is easier to see in tabular format what I am trying to achieve.我附上了来自 Excel 的图像,因为它更容易以表格格式查看我想要实现的目标。

链接到图片

I tried using.sort_values() but I couldn't sort ' Cost '.我尝试使用.sort_values(),但无法对“ Cost ”进行排序。

Thanks in advance提前致谢


df_pivot: df_pivot:

bm BM Utm_campaign Utm_campaign Time时间 Cost成本 Ftd FTD Install安装 Reg注册 Instal_cost安装成本 Reg_ cost注册费用 FTD_cost FTD_cost CTR点击率
name49438名称49438 Total全部的 2,43 2,43 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OPD_DE_SL_name49438 OPD_DE_SL_name49438 11:00 11:00 2,43 2,43 0 0 0 0 0 0 0 0 0 0 0 0 0 0
name54908名称54908 Total全部的 8,5 8,5 0 0 2 2 1 1 4,25 4,25 8,5 8,5 0 0 1,02 1,02
OPD_DE_SL_name54908 OPD_DE_SL_name54908 10:00 10:00 8,5 8,5 0 0 2 2 0 0 4,25 4,25 0 0 0 0 1,02 1,02
11:00 11:00 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
name56281名称56281 Total全部的 17,76 17,76 0 0 4 4 3 3 4,44 4,44 5,92 5,92 0 0 0,63 0,63
OPD_DE_name56281 OPD_DE_name56281 11:00 11:00 17,76 17,76 0 0 4 4 3 3 4,44 4,44 5,92 5,92 0 0 0,63 0,63
name57749名称57749 Total全部的 0,01 0,01 0 0 0 0 0 0 0 0 0 0 0 0 0 0
OPD_DE_SL_name57749 OPD_DE_SL_name57749 10:00 10:00 0,01 0,01 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11:00 11:00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Try:尝试:

df_pivot['ucost'] = df_pivot['Cost'].str.replace(',', '').astype(int)
df_pivot = df_pivot.sort_values(by = ['ucost', "bm", 'Utm_campaign', "Time"], axis = 0, ascending=[False, True, False, True]).drop('ucost', axis=1)

res:资源:

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM