【问题标题】:Python Pandas count result of aggregate function with conditionPython Pandas计算聚合函数的结果与条件
【发布时间】:2020-06-23 07:02:09
【问题描述】:

我很难用语言表达,但我正在尝试“计算”一组两列的计数高于 2 的次数。

我有一个带有 2 个“键”的 DataFrame:

#The 'data' isn't important here, but it exists
df = pd.DataFrame({'key1' : [1,5,1,2,6,3,3,3,4,4,4,7],
                   'key2' : [1,1,1,2,2,3,3,3,4,4,4,4],
                   'data' : [0,0,0,0,0,0,0,0,0,0,0,0]})

我按 key1 和 key2 分组并计算它们相同的次数:

new_df = df.groupby(['key1','key2']).agg(['count'])
print(new_df)

哪些输出:

           data
          count
key1 key2      
1    1        2
2    2        1
3    3        3
4    4        3
5    1        1
6    2        1
7    4        1

我需要能够计算 key1 和 key2 组出现超过 2 次的次数。 IE。 我想计算 'data count' 超过 2 的次数(在本例中是两次)

类似:

len(new_df.loc[new_df['data'] > 2])

但这不起作用并给我错误:

NotImplementedError: Indexing a MultiIndex with a DataFrame key is not implemented

我正在寻找一种尽可能高效的解决方案,因为我原来的 df 可能非常大。 谢谢!

【问题讨论】:

    标签: python pandas dataframe count aggregate


    【解决方案1】:

    key1 and key 上使用DataFrame.groupby,然后使用聚合函数Groupby.size,然后使用Series.gt 创建一个布尔掩码,其中True 值出现在组大小大于2 的位置,然后使用Series.sum 统计此类组的总数:

    mask = df.groupby(['key1','key2']).size().gt(2)
    count = mask.sum()
    

    结果:

    # print(mask)
    key1  key2
    1     1       False
    2     2       False
    3     3        True
    4     4        True
    5     1       False
    6     2       False
    7     4       False
    dtype: bool
    
    # print(count)
    2
    

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2021-07-31
      • 2020-05-01
      • 1970-01-01
      • 2019-01-08
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多