Python groupby中的特定值计数
我有以下数据帧:Python groupby中的特定值计数,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有以下数据帧: df = pd.DataFrame([ ('A', 'A', 'Cat'), ('A', 'A', 'Dog'), ('A', 'A', 'Cat'), ('A', 'B', 'Dog'), ('B', 'B', 'Rat'), ('B', 'C', 'Cat'), ('B', 'C', 'Cat') ], columns=['id', 'group', 'Animal']) 我想按id和group对其进行分组,并计算各
df = pd.DataFrame([
('A', 'A', 'Cat'),
('A', 'A', 'Dog'),
('A', 'A', 'Cat'),
('A', 'B', 'Dog'),
('B', 'B', 'Rat'),
('B', 'C', 'Cat'),
('B', 'C', 'Cat')
], columns=['id', 'group', 'Animal'])
我想按id
和group
对其进行分组,并计算各组中出现的Cat
。输出示例如下:
[2, 0, 0, 2]
2cat
组AA
组AB
中的0cat
组BB
中的0cat
2组BC
有人能帮忙吗?谢谢 您需要
掩码
+groupby
:
df['Animal'] = df['Animal'].mask(df['Animal'].ne('Cat'))
df.groupby(['id', 'group'])['Animal'].count().tolist()
您可以使用
value\u计数
df.groupby(['id','group']).Animal.value_counts().unstack(fill_value=0).loc[:,'Cat'].tolist()
Out[144]: [2, 0, 0, 2]
在最后一步之前返回更多信息。loc
df.groupby(['id','group']).Animal.value_counts().unstack(fill_value=0)
Out[145]:
Animal Cat Dog Rat
id group
A A 2 1 0
B 0 1 0
B B 0 0 1
C 2 0 0
如果0值不重要,您可以尝试:
list(df[df['Animal']=='Cat'].groupby(['id', 'group']).count()['Animal'])
对不起,我的英语你的问题与此非常相似(如果不是重复的话) 如果要执行不属于pandas的某些聚合(例如,
sum
,max
,min
),则应使用
请注意,apply
可能会慢一些,所以不要到处使用
现在,对于您的问题,您可以从以下分组开始:
df.groupby(by=["id", "group"])
然后,从以下组中选择Animal
列:
df.groupby(by=["id", "group"])['Animal']
此时,每个不同的组都有Animal
列中的值,可以进行任何聚合
让我们定义一个函数来计算熊猫系列中的Cat
s:
def count_cat(series):
return (series == 'Cat').sum()
现在需要做的就是将此函数传递给apply
方法,如下所示:
df.groupby(by=["id", "group"])['Animal'].apply(count_cat).reset_index(name='count_cat')
结果是:
身份证件
组
猫伯爵
0
A.
A.
2.
1.
A.
B
0
2.
B
B
0
3.
B
C
2.
注意:ne
是“不相等”这是否回答了您的问题?
df.groupby(by=["id", "group"])['Animal'].apply(count_cat).reset_index(name='count_cat')