【问题标题】:pandas groupby count string occurrence over columnpandas groupby 计算列上出现的字符串
【发布时间】:2015-10-17 10:28:40
【问题描述】:

我想计算一个字符串在分组的 pandas 数据框列中出现的次数。

假设我有以下数据框:

catA    catB    scores
A       X       6-4 RET
A       X       6-4 6-4
A       Y       6-3 RET
B       Z       6-0 RET
B       Z       6-1 RET

首先,我想按catAcatB 分组。对于这些组中的每一个,我想计算RETscores 列中的出现次数。

结果应该是这样的:

catA    catB    RET
A       X       1
A       Y       1
B       Z       2

两列分组很简单:grouped = df.groupby(['catA', 'catB'])

但是接下来呢?

【问题讨论】:

    标签: python pandas count group-by dataframe


    【解决方案1】:

    groupby 对象的“分数”列上调用apply 并使用矢量化str 方法contains,使用它来过滤group 并调用count

    In [34]:    
    df.groupby(['catA', 'catB'])['scores'].apply(lambda x: x[x.str.contains('RET')].count())
    
    Out[34]:
    catA  catB
    A     X       1
          Y       1
    B     Z       2
    Name: scores, dtype: int64
    

    要指定为列,请使用transform,以便聚合返回一个系列,其索引与原始 df 对齐:

    In [35]:
    df['count'] = df.groupby(['catA', 'catB'])['scores'].transform(lambda x: x[x.str.contains('RET')].count())
    df
    
    Out[35]:
      catA catB   scores count
    0    A    X  6-4 RET     1
    1    A    X  6-4 6-4     1
    2    A    Y  6-3 RET     1
    3    B    Z  6-0 RET     2
    4    B    Z  6-1 RET     2
    

    【讨论】:

    • 这会永久存储在新列中吗?如果没有,如何将其存储为新列?我想要做的是,如果计数大于某个数字,我只想显示输出。
    • 如何搜索两个不同的字符串?所以str可以包含RETASDF?那么我需要一个正则表达式对吗?
    • 使用x.str.contains('RET|ASDF'),您也应该发布您的全部要求,更新您的问题并将您的问题保留为每个问题1个问题,而不是增加您的问题
    • 对不起。问这个问题时我不知道这个要求。现在好了……
    • 不用担心,但您必须了解 SO 不是一个论坛站点,它是一个 Q+A 站点,因此为了帮助其他人帮助您,您需要使用足够的信息来完全定义您的问题,以帮助每个人。如果我的回答完全解决了您的问题,那么您可以接受,我的回答左上角会有一个空勾
    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2022-01-06
    • 1970-01-01
    • 2021-01-06
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多