比如说,我有这样的数据:
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。
最佳答案
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/