python - pandas groupby 计算字符串在列上的出现次数

标签 python pandas count group-by dataframe

我想计算一个字符串在分组的 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 分组。对于这些组中的每一个,我想计算 scores 列中 RET 的出现次数。

结果应该是这样的:

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

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

但下一步是什么?

最佳答案

调用applygroupby 的“分数”列中对象并使用矢量化 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

关于python - pandas groupby 计算字符串在列上的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31649669/

相关文章:

python - 如何从函数内部删除全局变量?

python - 如何在python中导入模块

python - pandas 将 2 个具有不同日期索引的数据帧组合在一起

Python numpy - 列表赋值索引超出范围

mysql - 选择并统计所有条目并根据条目进行分组

c - 从现在到 C 中的特定时间有多少秒

SQL计算行数

python - pandas:如何选择每个 GROUP BY 组中的第一行?

python - ttk .grid(sticky = 'ew' ) 与 .grid_columnconfigure 不适用于笔记本条目

python - pandas dataframe上的for-if循环语句操作问题