说,我有这样的数据:
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(更好),以使col2的百分比分别为group(col1),如:
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。
答案 0 :(得分:2)
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
使用dict理解:
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
答案 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()
希望这会有所帮助。