如何计算pandas数据帧中分类数据的子组?

2024-09-28 20:48:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下熊猫数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({"shops": ["shop1", "shop2", "shop3", "shop4", "shop5", "shop6"], "franchise" : ["franchise_A", "franchise_A", "franchise_A", "franchise_A", "franchise_B", "franchise_B"],"items" : ["dog", "cat", "dog", "dog", "bird", "fish"]})
df = df[["shops", "franchise", "items"]]
print(df)

   shops    franchise items
0  shop1  franchise_A   dog
1  shop2  franchise_A   cat
2  shop3  franchise_A   dog
3  shop4  franchise_A   dog
4  shop5  franchise_B  bird
5  shop6  franchise_B  fish

因此,每一行都是唯一的样本shop1shop2,等等,其中每个样本属于子群franchise_Afranchise_Bfranchise_C,等等。 在items列中,只有四个可能的类别值:dogcatfishbird。我的动机是为每个“特许经营权”创建一个dogcatfishbird数量的条形图。在

我希望输出是

^{pr2}$

我想我首先必须使用groupby(),例如

df.groupby("franchise").count()
             shops  items
franchise                
franchise_A      4      4
franchise_B      2      2

但我不知道我是如何计算每一个特许经营项目的数量。在


Tags: importdfasitemscatpdshopsdog
2条回答

您可以将value_counts^{}一起使用,谢谢Nickil Maveli

from collections import Counter

print (df.groupby("franchise")['items'].value_counts().unstack(fill_value=0))
items        bird  cat  dog  fish
franchise                        
franchise_A     0    1    3     0
franchise_B     1    0    0     1

另一个带有^{}^{}的解决方案:

^{pr2}$
print (df.pivot_table(index="franchise", columns='items', aggfunc='size', fill_value=0))
items        bird  cat  dog  fish
franchise                        
franchise_A     0    1    3     0
franchise_B     1    0    0     1

您可以在^{}中包含items列,然后使用^{}。在

>>> df.groupby(['franchise', 'items']).size().unstack(fill_value=0)

items        bird  cat  dog  fish
franchise                        
franchise_A     0    1    3     0
franchise_B     1    0    0     1

粗略)基准

^{pr2}$

相关问题 更多 >