【问题标题】:Pandas finding occurrences of a specific value across multiple columnsPandas 在多列中查找特定值的出现
【发布时间】:2020-10-26 22:36:41
【问题描述】:

我想查找特定时间下值为 0 的 id 的数量。 我的 df 看起来像这样:

    datetime          id          value        other_info
   05/01/12:00       001            1              n/a
   05/01/12:00       001            0              n/a
   05/01/12:30       001            1              n/a
   05/01/12:00       002            0              n/a
   05/01/12:30       002            0              n/a

我的预期输出是:

   datetime          id          zero_count
   05/01/12:00       001            1
   05/01/12:00       002            1
   05/01/12:30       002            1

我认为按时间分组,然后按 id 分组,然后运行 ​​value 等于 0 的计数会起作用,但它给了我整个数据帧中 0 的数量,而不是对应于日期时间和 id 的 0 的数量。

我对 pandas 还很陌生,所以我不知道是否有内置的东西可以帮助我。我真的很感激朝着正确的方向轻推。

【问题讨论】:

    标签: python pandas group-by count


    【解决方案1】:

    你可以过滤你的数据然后分组:

    (df[df['value']==0].groupby(['datetime','id']).size()
        .reset_index(name='zero_count')
    )
    

    输出:

          datetime  id  zero_count
    0  05/01/12:00   1           1
    1  05/01/12:00   2           1
    2  05/01/12:30   2           1
    

    【讨论】:

    • 你知道为什么我会得到一个空的df吗?我可以我的值为零,但它只返回 3 个列标题。
    • 您的value 列是数字类型还是字符串类型?您可能需要将==0 更改为=='0'
    【解决方案2】:

    你可以的

    s=df.value.eq(0).astype(int).groupby([df.datetime,df.id]).sum().reset_index()
          datetime  id  value
    0  05/01/12:00   1      1
    1  05/01/12:00   2      1
    2  05/01/12:30   1      0
    3  05/01/12:30   2      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2022-12-12
      • 2020-06-01
      相关资源
      最近更新 更多