【问题标题】:Pandas groupby and agg by conditionPandas groupby 和 agg 按条件
【发布时间】:2020-03-03 13:25:01
【问题描述】:
df.groupby(['Month']).agg({'Status' : ['count']})

上面的行按Month 对数据框进行分组,并计算每个月Status 的数量。有没有办法只计算Status=X 的位置?类似于下面的错误代码:

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

基本上,我想计算每个月有多少Status 是X。

【问题讨论】:

  • 请添加一些文本格式的示例数据供我们检查
  • 你试过.filter方法。没有示例数据,我无法发表太多评论
  • stackoverflow.com/questions/27488080/… ,你检查过这个链接吗?它解释了如何使用.apply 来做你想做的事。

标签: python pandas dataframe aggregate


【解决方案1】:

也可以使用lambda函数

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

或

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

【讨论】:

    【解决方案2】:

    让我们做点不一样的事情

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

    【讨论】:

    • 我来! @Andy L.
    • @ansev:我喜欢 Wen 不同的东西。他通常会想出令人惊讶的令人耳目一新的解决方案,这是我从未想过的。我仍然记得他使用sum 到concatenate 的一系列我以前从未想过的列表的解决方案:)
    【解决方案3】:

    一条捷径

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

    任重而道远

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

    【讨论】:

      【解决方案4】:

      你做df.loc[df.Status=='X'].groupby(['Month']).agg({'Status' : ['count']})

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2018-04-14
        • 1970-01-01
        • 1970-01-01
        • 2019-08-31
        相关资源
        最近更新 更多