Pandas 表:我可以在输出中显示小计吗?

Pandas 表:我可以在输出中显示小计吗?,pandas,pivot-table,Pandas,Pivot Table,假设我有一个非常简单的数据帧,如下所示: data={"Label": (1,1,1,2,2,2,2,3,3), "Value": ("a","b","b","b","c","a","b","a","c")} df = pd.DataFrame(data = data) 通过编写pd.pivot\u表(testdf,index=[“Label”,“Value”],values=[“Value”],aggfunc=len),我可以生成如下pivot表: 是否有任何方法可以复制包含顶级聚合的Exc

假设我有一个非常简单的数据帧,如下所示:

data={"Label": (1,1,1,2,2,2,2,3,3), "Value": ("a","b","b","b","c","a","b","a","c")}
df = pd.DataFrame(data = data)
通过编写
pd.pivot\u表(testdf,index=[“Label”,“Value”],values=[“Value”],aggfunc=len),我可以生成如下pivot表

是否有任何方法可以复制包含顶级聚合的Excel数据透视表功能


您在pandas中找不到明确的等价物,但您始终可以将多个函数链接在一起。我将给出一个
groupby
示例:

import pandas as pd

data={"Label": (1,1,1,2,2,2,2,3,3), "Value": ("a","b","b","b","c","a","b","a","c")}
df = pd.DataFrame(data = data)

df["Top_Level_Counts"] = df.groupby("Label").transform("count")
df["Counts"] = df.groupby(["Label","Value"]).transform("count")
print(df)

   Label Value  Top_Level_Counts  Counts
0      1     a                 3       1
1      1     b                 3       2
2      1     b                 3       2
3      2     b                 4       2
4      2     c                 4       1
5      2     a                 4       1
6      2     b                 4       2
7      3     a                 2       1
8      3     c                 2       1
或者像这样的一行(我喜欢):

import pandas as pd

data={"Label": (1,1,1,2,2,2,2,3,3), "Value": ("a","b","b","b","c","a","b","a","c")}
df = pd.DataFrame(data = data)

df["Top_Level_Counts"] = df.groupby("Label").transform("count")
df["Counts"] = df.groupby(["Label","Value"]).transform("count")
print(df)

   Label Value  Top_Level_Counts  Counts
0      1     a                 3       1
1      1     b                 3       2
2      1     b                 3       2
3      2     b                 4       2
4      2     c                 4       1
5      2     a                 4       1
6      2     b                 4       2
7      3     a                 2       1
8      3     c                 2       1
df = (pd.DataFrame(data = data)
        .assign(Top_Level_Counts = lambda x:x.groupby("Label").transform("count"))
        .assign(Counts = lambda x:x.groupby(["Label","Value"]).transform("count"))
        ).set_index(["Label","Value"])

print(df)

             Top_Level_Counts  Counts
Label Value
1     a                     3       1
      b                     3       2
      b                     3       2
2     b                     4       2
      c                     4       1
      a                     4       1
      b                     4       2
3     a                     2       1
      c                     2       1