我想计算一个分组的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

首先,我想按catAcatB分组。对于这些组中的每一个,我都希望在RET列中计算scores的出现。

结果应如下所示:
catA    catB    RET
A       X       1
A       Y       1
B       Z       2

通过两列进行分组很容易:grouped = df.groupby(['catA', 'catB'])
但是接下来呢?

最佳答案

apply 对象的“分数”列上调用 groupby ,并使用vectorise 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/

10-12 18:25