我想计算一个分组的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
首先,我想按
catA
和catB
分组。对于这些组中的每一个,我都希望在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/