Pandas按条件分组和聚合

5
df.groupby(['Month']).agg({'Status' : ['count']})

上面的代码按月份分组,并计算每个月份中状态的数量。有没有一种方法只计算状态=X的计数?类似下面错误的代码:
df.groupby(['Month']).agg({'Status' == 'X' : ['count']})

基本上,我想要每个月有多少个状态为X的计数。

请添加一些文本格式的示例数据供我们检查。 - nitin3685
你尝试过使用 .filter 方法吗?没有样本数据,我无法发表更多评论。 - nitin3685
你看过这个链接吗?它解释了如何使用.apply来实现你想要的功能。链接地址为:https://dev59.com/Vl4c5IYBdhLWcg3w1dLx - nitin3685
4个回答

7

让我们做一些不同的事情

pd.crosstab(df.Month,df.Status)['X']

1
me to! @Andy L. - ansev
2
@ansev: 我喜欢温的不同想法。他通常会提出令人惊喜的创新解决方案,这是我从未想过的。我仍然记得他使用sum连接一系列列表的解决方案,这是我以前从未想到过的 :) - Andy L.

7

也可以使用lambda函数

df.groupby('Month').agg(lambda x: (x=='X').sum())

或者

df.groupby('Month').Status.agg(lambda x: (x=='X').sum())

6

一种简便的方法

(df.Status == 'X').groupby(df.Month).sum()

一个漫长的过程

df.where(df.Status == 'X').groupby('Month').Status.count()

1

您可以执行 df.loc[df.Status=='X'].groupby(['Month']).agg({'Status' : ['count']})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接