熊猫分组聚合与百分比

时间:2021-01-12 18:57:38

标签: python pandas pandas-groupby

我有以下数据框:

import pandas as pd
import numpy as np
np.random.seed(123)
n = 10
df = pd.DataFrame({"val": np.random.randint(1, 10, n), 
                   "cat": np.random.choice(["X", "Y", "Z"], n)})

   val cat
0    3   Z
1    3   X
2    7   Y
3    2   Z
4    4   Y
5    7   X
6    2   X
7    1   X
8    2   X
9    1   Y

我想知道每个类别 XYZ 在整个 val 列总和中所占的百分比。我可以像这样聚合 df

total_sum = df.val.sum()
#32
s = df.groupby("cat").val.sum().div(total_sum)*100

#this is the desired result in % of total val
cat
X    46.875  #15/32
Y    37.500  #12/32
Z    15.625  #5/32
Name: val, dtype: float64

然而,令我感到惊讶的是,pandas 似乎没有像 df.groupby("cat").val.freq() 而不是 df.groupby("cat").val.sum()df.groupby("cat").val.mean() 这样的百分比/频率函数。我认为这是一个常见的操作,Series.value_counts 已经用 normalize=True 实现了这个 - 但是对于 groupby 聚合,我找不到任何类似的东西。我在这里遗漏了什么还是确实没有开箱即用的功能?

0 个答案:

没有答案