Python 每个类别分数的计数

Python 每个类别分数的计数,python,pandas,Python,Pandas,我有一个与此类似的数据帧 ID category fraction_0 fraction 1 A 1 1/3 2/3 A 1 1/3 2/3 A 0 1/3 2/3 C 1 0/1 1/1 B 0 1/1 0/1 分数_0和分数_1被输出。 分数_0是按ID分组的,在ID A中,类别中的数量是0。以

我有一个与此类似的数据帧

ID  category  fraction_0  fraction 1
A    1         1/3         2/3
A    1         1/3         2/3
A    0         1/3         2/3 
C    1         0/1         1/1
B    0         1/1         0/1
分数_0和分数_1被输出。 分数_0是按ID分组的,在ID A中,类别中的数量是0。以A为例,在3as中,有一个0和两个1。所以分数_0是1/3,分数_1是2/3

我的代码如下所示

df.groupby('ID')['category'].agg(lamda x: x/x.sum())

但是,这段代码不能帮助我对0和1进行分类。有人知道如何解决这个问题吗?

使用
groupby
+
value\u计数
normalize=True
来获得分数。然后,我们需要重新塑造并将结果合并回原始结果

res = (df.groupby('ID')['category']      # For category within each ID
        .value_counts(normalize=True)    # Calculate %
        .unstack(-1)                     # Each category to a column
        .fillna(0)                       # No occurrences -> 0%
        .add_prefix('fraction_'))        # Modify column names

df = df.merge(res, on='ID', how='left')


使用
groupby
+
value\u counts
normalize=True
获得分数。然后,我们需要重新塑造并将结果合并回原始结果

res = (df.groupby('ID')['category']      # For category within each ID
        .value_counts(normalize=True)    # Calculate %
        .unstack(-1)                     # Each category to a column
        .fillna(0)                       # No occurrences -> 0%
        .add_prefix('fraction_'))        # Modify column names

df = df.merge(res, on='ID', how='left')


unstacked(-1)是什么意思here@totolow在groupby之后,您将获得一个多索引系列,其中第0级是ID,第一级是类别。例如,查看
df.groupby('ID')['category'].value\u计数(normalize=True)
的输出。然后取消堆叠将类别转换为它们自己的列。取消堆叠(-1)是什么意思here@totolow在groupby之后,您将获得一个多索引系列,其中第0级是ID,第一级是类别。例如,查看
df.groupby('ID')['category'].value\u计数(normalize=True)
的输出。然后取消堆叠将类别转换为它们自己的列。