Python 熊猫-组大小的计数百分比
比如,我有这样的数据:Python 熊猫-组大小的计数百分比,python,pandas,dataframe,group-by,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
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列分组(已按分组结果):
因此,现在我需要计算出每个子组的哪个百分比,该计数分别由2列组成整个组:
我需要再添加一列,或转换为系列(更好),以分别获得col2的百分比组(col1),如下所示:
或者它可以是每个组的单独系列:[0.66 0.1]
和[0.33 0.9]
。
如何实施
让我来描述一下这些数据的含义。例如,它可以是科目(0,1,2)、结果(0或1)以及每个科目每个结果的学生人数。
因此,整个想法是要计算出0、1等科目的不及格/通过率
还有一件事-有时只有一个结果(0或1)像所有学生都通过的科目一样,我仍然需要能够判断出该科目0的百分比为0,0,1的百分比为1。您可以尝试以下方法:
df = pd.DataFrame({'A':[0,1,0,1,0],'B':[10,5,2,16,10]}, index=[0,1,0,1,0])
df2 = df.ix[0] / df.ix[0].sum()
df3 = df.ix[1] / df.ix[1].sum()
希望这会有所帮助。您需要通过以下第一级索引:
要存储系列
请使用dict comprehension:
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
非常感谢您的回复。但我相信我描述的任务是错误的,让我补充更多细节并纠正错误。我道歉。请查看更新的问题。解决方案已更改,请检查。感谢您的努力。请看更新后的帖子。
df = pd.DataFrame({'A':[0,1,0,1,0],'B':[10,5,2,16,10]}, index=[0,1,0,1,0])
df2 = df.ix[0] / df.ix[0].sum()
df3 = df.ix[1] / df.ix[1].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
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