Pandas groupby 和 agg 按条件

nov*_*ice 3 python aggregate dataframe pandas

df.groupby(['Month']).agg({'Status' : ['count']})
Run Code Online (Sandbox Code Playgroud)

上面的行将数据框分组Month并计算Status每个月的数量。有没有办法只得到一个计数在哪里Status=X?类似于下面不正确的代码:

df.groupby(['Month']).agg({'Status' == 'X' : ['count']})
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我想多少计数StatusX每月。

ans*_*sev 7

也可以使用lambda函数

df.groupby('Month').agg(lambda x: (x=='X').sum())
Run Code Online (Sandbox Code Playgroud)

或者

df.groupby('Month').Status.agg(lambda x: (x=='X').sum())
Run Code Online (Sandbox Code Playgroud)


And*_* L. 6

一条捷径

(df.Status == 'X').groupby(df.Month).sum()
Run Code Online (Sandbox Code Playgroud)

很长的路

df.where(df.Status == 'X').groupby('Month').Status.count()
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

让我们做点不一样的

pd.crosstab(df.Month,df.Status)['X']
Run Code Online (Sandbox Code Playgroud)

  • @ansev:我喜欢文的不同事物。他通常会提出令人惊讶的新鲜解决方案,这是我从未想到的。我仍然记得他的解决方案使用“sum”来“连接”一系列列表,这是我以前从未想过的:) (2认同)