当前位置: 首页 > 面试题库 >

pandas groupby计数字符串出现在列上

段干玺
2023-03-14
问题内容

我想计算一个分组的pandas dataframe列中字符串的出现。

假设我有以下数据框:

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

首先,我想GROUP BYcatAcatB。对于这些组中的每一个,我都希望计算RETscores列中的出现次数。

结果应如下所示:

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

通过两列进行分组很容易: grouped = df.groupby(['catA', 'catB'])

但是接下来呢?


问题答案:

调用对象apply的“得分”列,groupby并使用vectorisestr方法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


 类似资料:
  • 我知道计算列表项的简单出现次数非常简单: 但是我想知道如何做的是每次一个字符串出现在列表条目的子字符串中时计数。 例如,我想查看列表

  • 问题内容: 计算字符串中字符出现次数的最简单方法是什么? 例如,计算出现在其中的次数 问题答案: 返回sub范围中的子字符串不重叠的次数。可选参数并以片表示法解释。

  • 问题内容: 我需要计算一个字符在一个字符串中出现的次数。 例如,假设我的字符串包含: 我想找到逗号字符的数量,即3。以及沿逗号分割后的各个字符串的数量,即4。 我还需要验证每个字符串,即str1或str2或str3或str4不应超过15个字符。 问题答案: 我已经更新了这个答案。我喜欢更好地使用比赛的想法,但是比较慢: 如果您事先知道要搜索的内容,则使用正则表达式文字;如果不知道,则可以使用构造函

  • 问题内容: 计算给定字符串的出现次数(包括Python中的重叠)的最佳方法是什么?这是一种方法: 该方法返回5。 Python中有更好的方法吗? 问题答案: 好吧,这可能会更快,因为它可以在C中进行比较:

  • 我需要返回一个字典,该字典计算预定列表中每个字母出现的次数。问题是我需要把大小写字母都算成一样,所以我不能用.low或.uper。 因此,例如,如果“t”是要搜索的字母,“This is a Python String”应该返回{nt':3}。 这是我目前所掌握的... 其中'letters'是条件,fullText是我正在搜索的字符串。 这里很明显的问题是,如果测试是“t”而不是“t”,我的代码

  • 问题内容: 如何计算一个单词出现在字符串列表中的次数? 例如: 单词“句子”的结果是2 问题答案: 使用一个对象并在空白处分割单词。您可能还希望小写单词,并删除标点符号: 或使用仅与单词字符匹配的正则表达式: 现在,您有了一本包含每个单词计数的字典。 演示: