python - Pandas - 计算群体规模的百分比

标签 python pandas dataframe group-by

比如说,我有这样的数据:

col1   col2 other columns..
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      0    ...
0      1    ...
0      1    ...
0      1    ...
0      1    ...
0      1    ...
0      1    ...
1      0    ...
1      0    ...
etc...

数据已按 2 列分组(已按分组结果):

gr = df.groupby(['col1', 'col2']).size()

col1   col2        
0      0           10
       1           5
1      0           2
       1           16
2      0           10

所以现在我需要通过 2 列计算出每个子组的计数分别占整个组的百分比:

我需要再添加一列,或转换为 Series(更好)以分别在组(col1)中包含 col2 的百分比,例如:

       col1        col2
0      0           0.66
       1           0.33
1      0           0.1
       1           0.9
2      0           1

或者它可以是每个组的单独系列:[0.66 0.1 1][0.33 0.9]。 如何实现?

那么让我描述一下这个数据的含义。例如,它可以是科目 (0,1,2)、结果(0 或 1)以及每个科目每个结果的学生人数。 所以整个想法是弄清楚学生在科目 0,1 等方面失败/通过的百分比。

另外一件事 - 有时只有一个结果(0 或 1)像所有学生都通过的科目,我仍然需要能够告诉这个科目 0 的百分比是 0,0 和 1为 1。

最佳答案

你需要groupby按第一级索引 sum :

gr = df.groupby(['col1', 'col2']).size()
print (gr)
col1  col2
0     0       10
      1        5
1     0        2
      1       16
2     0       10
dtype: int64

print (gr.groupby(level=0).sum())
col1
0    15
1    18
2    10
dtype: int64

print (gr / gr.groupby(level=0).sum())
col1  col2
0     0       0.666667
      1       0.333333
1     0       0.111111
      1       0.888889
2     0       1.000000
dtype: float64

要存储 Series 使用字典理解:

dfs = {i:g.reset_index(drop=True) for i, g in g1.groupby(level=1)}

print (dfs[0])
0    0.666667
1    0.111111
2    1.000000
dtype: float64

print (dfs[1])
0    0.333333
1    0.888889
dtype: float64

关于python - Pandas - 计算群体规模的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37404392/

相关文章:

python - 为什么 "sort_values"无法正常工作?

python - Makefile中 "-I"的作用是什么?

python - Pandas突然无法打开Excel文件(在OLE2复合文档中找不到工作簿

python - 如何在列表中优雅地将 '1-3,6-8' 转换为 '1 2 3 6 7 8'?

python - 拆分列

python - 如何在正则表达式匹配后从数据帧中提取字符串

python - 如何将命令提示符中的值存储在空的 python 字典中?

pandas - 如何将 DataFrame 中的行值与另一个 DataFrame 中的值匹配

python - 按A列过滤DataFrame的最佳方法,B列条件并给出C列的最小值

python - 将 pandas 数据框列表转换为 json