python groupby:key1的key2值的百分比

python groupby:key1的key2值的百分比,python,pandas,Python,Pandas,我有一个数据帧,我用两个键将它分组df.groupby(['key1',key2'])。对于每个key2条目,如何显示其在key1值中所占的百分比?为“k1”和(“k1”、“k2”)调用groupby两次,然后执行div: import pandas as pd k1 = ["a", "a", "a", "a", "b", "b", "b"] k2 = ["x", "x", "y", "y", "x", "y", "y"] df = pd.DataFrame({"k1":k1, "k2":k2}

我有一个数据帧,我用两个键将它分组
df.groupby(['key1',key2'])
。对于每个key2条目,如何显示其在key1值中所占的百分比?

为“k1”和(“k1”、“k2”)调用groupby两次,然后执行
div

import pandas as pd
k1 = ["a", "a", "a", "a", "b", "b", "b"]
k2 = ["x", "x", "y", "y", "x", "y", "y"]
df = pd.DataFrame({"k1":k1, "k2":k2})

df.groupby(["k1", "k2"]).k2.count().div(
    df.groupby("k1").k1.count().astype(float), level=0)
输出:

k1  k2
a   x     0.500000
    y     0.500000
b   x     0.333333
    y     0.666667

这里有一个使用groupby语句的替代方法

按k1分组,选择列k2并应用lambda函数。lambda得到k1内每级k2的频率计数,然后除以k1的计数:

In [1]: df.groupby('k1')['k2'].apply(lambda x: pd.value_counts(x)/x.count().astype(float))

Out[1]:
k1
a   x    0.500000
    y    0.500000
b   y    0.666667
    x    0.333333
性能:

HYRY方法:

100 loops, best of 3: 3.07 ms per loop
我的方法:

1000 loops, best of 3: 1.98 ms per loop

谢谢,这就是我想要的。嗨@gus,如果这是你想要的答案,接受它会有帮助。