GVKun编程网logo

Python Pandas:数据透视表:aggfunc串联而不是np.size或np.sum(python pandas 数据透视表)

2

针对PythonPandas:数据透视表:aggfunc串联而不是np.size或np.sum和pythonpandas数据透视表这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Pandas

针对Python Pandas:数据透视表:aggfunc串联而不是np.size或np.sumpython pandas 数据透视表这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Pandas 数据透视表 - 列和值之间的层次结构、pandas 数据透视表 DF、Pandas 数据透视表列按日期值、Pandas 数据透视表,对值进行排序等相关知识,希望可以帮助到你。

本文目录一览:

Python Pandas:数据透视表:aggfunc串联而不是np.size或np.sum(python pandas 数据透视表)

Python Pandas:数据透视表:aggfunc串联而不是np.size或np.sum(python pandas 数据透视表)

我在数据框中有一些条目,例如:

name,age,phonenumber
 A,10,Phone1
 A,Phone2
 B,21,PhoneB1
 B,PhoneB2
 C,23,PhoneC

这是我要通过数据透视表实现的目标:

 name,phonenumbers,phonenocount
 A,"Phone1,Phone2",2
 B,"PhoneB1,PhoneB2",2
 C,"PhoneC",1

我正在尝试类似的东西:

pd.pivot_table(phonedf,index=['name','age','phonenumbers'],values=['phonenumbers'],aggfunc=np.size)

但是我希望将电话号码作为aggfunc的一部分进行串联。有什么建议 ?

Pandas 数据透视表 - 列和值之间的层次结构

Pandas 数据透视表 - 列和值之间的层次结构

试试:

table.reorder_levels([1,0],axis=1).sort_index(axis=1)

pandas 数据透视表 DF

pandas 数据透视表 DF

如果需要计数级别,请使用 MultiIndex.nlevels

print(df_pivot.index.nlevels)
3
print(df_pivot.columns.nlevels)
1

Pandas 数据透视表列按日期值

Pandas 数据透视表列按日期值

如何解决Pandas 数据透视表列按日期值?

我有一个数据透视表,其中行按日期排序,然后列按字母顺序排列。

我希望以不同的方式查看列顺序。例如,如果 location 在第一行显示一个值,那么我希望它是第一列。

我基本上使用 sort_values 尝试了以下代码的每个版本:

df1 = pd.pivot_table(df1,values = ''num'',index=''date'',columns = ''location_name'',aggfunc = "sum")
result = df1.sort_values((''date''),ascending=False)

// +-----------+---+---+---+---+
// |   date    | a | b | c | d |
// +-----------+---+---+---+---+
// | 7/31/2021 |   |   | 1 |   |
// | 8/1/2021  |   |   | 1 |   |
// | 8/2/2021  |   |   | 1 |   |
// | 8/3/2021  |   |   |   | 2 |
// | 8/4/2021  |   |   |   | 2 |
// | 8/5/2021  |   |   |   | 2 |
// | 8/6/2021  |   |   |   | 2 |
// | 8/7/2021  |   |   |   | 2 |
// | 8/8/2021  | 3 |   |   |   |
// | 8/9/2021  | 3 |   |   |   |
// | 8/10/2021 | 3 |   |   |   |
// +-----------+---+---+---+---+

所以上面列的顺序应该是 c,d,a,b,日期顺序保持不变。

有什么关于最好的方法的想法吗?

解决方法

试试:

cols = df.iloc[:,1:].apply(pd.Series.first_valid_index).sort_values().index
df = df[[''date'',*cols.tolist()]]
>>> df
         date    c    d    a   b
0   7/31/2021  1.0  NaN  NaN NaN
1    8/1/2021  1.0  NaN  NaN NaN
2    8/2/2021  1.0  NaN  NaN NaN
3    8/3/2021  NaN  2.0  NaN NaN
4    8/4/2021  NaN  2.0  NaN NaN
5    8/5/2021  NaN  2.0  NaN NaN
6    8/6/2021  NaN  2.0  NaN NaN
7    8/7/2021  NaN  2.0  NaN NaN
8    8/8/2021  NaN  NaN  3.0 NaN
9    8/9/2021  NaN  NaN  3.0 NaN
10  8/10/2021  NaN  NaN  3.0 NaN

Pandas 数据透视表,对值进行排序

Pandas 数据透视表,对值进行排序

如何解决Pandas 数据透视表,对值进行排序

我正在尝试在 Pandas 中创建数据透视表。

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],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])

我附上了一张 Excel 中的图片,因为它更容易以表格格式查看我想要实现的目标。

Link to image

我尝试使用 .sort_values() 但我无法对“成本”进行排序。

提前致谢


df_pivot:

bm Utm_campaign 时间 成本 Ftd 安装 注册 安装成本 注册费用 FTD_cost 点击率
name49438 总计 2,43 0 0 0 0 0 0 0
OPD_DE_SL_name49438 11:00 2,43 0 0 0 0 0 0 0
name54908 总计 8,5 0 2 1 4,25 8,5 0 1,02
OPD_DE_SL_name54908 10:00 8,5 0 2 0 4,25 0 0 1,02
11:00 0 0 0 1 0 0 0 0
name56281 总计 17,76 0 4 3 4,44 5,92 0 0,63
OPD_DE_name56281 11:00 17,63
name57749 总计 0,01 0 0 0 0 0 0 0
OPD_DE_SL_name57749 10:00 0,01 0 0 0 0 0 0 0
11:00 0 0 0 0 0 0 0 0

解决方法

试试:

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)

资源:

enter image description here

关于Python Pandas:数据透视表:aggfunc串联而不是np.size或np.sumpython pandas 数据透视表的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Pandas 数据透视表 - 列和值之间的层次结构、pandas 数据透视表 DF、Pandas 数据透视表列按日期值、Pandas 数据透视表,对值进行排序的相关知识,请在本站寻找。

本文标签: