pandas:pivot_table计算占比

例子:

>>>df=pd.DataFrame({
                 "A": ["foo", "foo", "foo", "foo", "foo",
                        "bar", "bar", "bar", "bar"],
                 "B": ["one", "one", "one", "two", "two",
                          "one", "one", "two", "two"],
                 "C": ["small", "large", "large", "small",
                       "small", "large", "small", "small",
                       "large"],
                 "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
                 "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
>>>df
     A    B      C  D  E
0  foo  one  small  1  2
1  foo  one  large  2  4
2  foo  one  large  2  5
3  foo  two  small  3  5
4  foo  two  small  3  6
5  bar  one  large  4  6
6  bar  one  small  5  8
7  bar  two  small  6  9
8  bar  two  large  7  9

>>>table=pd.pivot_table(df, values='D', index=['A', 'B'], 
                        aggfunc=len)

>>>table
         D
A   B     
bar one  2
    two  2
foo one  3
    two  2

请问如何计算每个不同A值和B值下D所占的比例?能提供pivot_table实现最好,groupby也行。

import pandas as pd

df = pd.DataFrame({
    "A": ["foo", "foo", "foo", "foo", "foo",
          "bar", "bar", "bar", "bar"],
    "B": ["one", "one", "one", "two", "two",
          "one", "one", "two", "two"],
    "C": ["small", "large", "large", "small",
          "small", "large", "small", "small",
          "large"],
    "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
    "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
count = df.shape[0]
pivot_table = df.pivot_table(index='A', columns='B', values='D', aggfunc='count')
pivot_table = pivot_table.apply(lambda x: x / count)
print(pivot_table)