首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于str.contains (或类似的)跨数据框列计数

基于str.contains (或类似的)跨数据框列计数
EN

Stack Overflow用户
提问于 2019-05-29 07:50:48
回答 2查看 1.2K关注 0票数 2

我想计算每一行中包含特定字符串的单元格的数量,该特定字符串超过一次的单元格应该只计算一次。

我可以计算一行中等于给定值的单元格的数量,但是当我扩展此逻辑以使用str.contains时,我遇到了问题,如下所示

代码语言:javascript
复制
d = {'col1': ["a#", "b","c#"], 'col2': ["a", "b","c#"]}
df = pd.DataFrame(d)

#can correctly count across rows using equality 
thisworks =( df =="a#" ).sum(axis=1)

#can count across  a column using str.contains
thisworks1=df['col1'].str.contains('#').sum()

#but cannot use str.contains with a dataframe so what is the alternative
thisdoesnt =( df.str.contains('#') ).sum(axis=1)

输出应该是一个序列,显示包含给定字符串的每行中的单元格数量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-29 08:12:04

使用df.apply的解决方案

代码语言:javascript
复制
df = pd.DataFrame({'col1': ["a#", "b","c#"], 
                   'col2': ["a", "b","c#"]})
df
  col1 col2
0   a#    a
1    b    b
2   c#   c#

df['sum'] = df.apply(lambda x: x.str.contains('#'), axis=1).sum(axis=1)

  col1 col2  sum
0   a#    a    1
1    b    b    0
2   c#   c#    2
票数 1
EN

Stack Overflow用户

发布于 2019-05-29 07:58:04

像这样的东西应该是有效的:

代码语言:javascript
复制
df = pd.DataFrame({'col1': ['#', '0'], 'col2': ['#', '#']})
df['totals'] = df['col1'].str.contains('#', regex=False).astype(int) +\
               df['col2'].str.contains('#', regex=False).astype(int)
df
#   col1 col2  totals
# 0    #    #       2
# 1    0    #       1

它应该泛化到您想要的任意数量的列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56351383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档