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)
的输出。然后取消堆叠将类别转换为它们自己的列。