pandas - 在 Pandas 数据框中查找一组子字符串的计数

标签 pandas

我得到了一组子字符串。我需要找到数据框中特定列中所有这些子字符串的出现次数。相关的数据框看起来像这样

  training['concat']

  0 svAxu$paxArWAn
  1 xvAxaSa$varRANi
  2 AxAna$xurbale
  3 go$BakwAH
  4 viXi$Bexena
  5 nIwi$kuSalaM
  6 lafkA$upamam
  7 yaSas$lipsoH
  8 kaSa$AGAwam
  9 hewumaw$uwwaram
  10 varRa$pUgAn

我的子字符串集是一个字典,其中键是子字符串,值是它们出现的概率

  reg = {'anuBavAn':0.35, 'a$piwra':0.2 ...... 'piwra':0.7, 'pa':0.03, 'a':0.0005}
  #The length of dicitioanry is 2000

特别是我需要找到那些出现超过两次的子串

我编写了以下代码来执行该任务。是否有更优雅的 pythonic 方式或 panda 特定方式来实现与当前实现相同的方式需要相当长的时间来执行。

  elites = dict()
  for reg_pat in reg_:
  count = 0
  eliter = len(training[training['concat'].str.contains(reg_pat)]['concat'])
  if eliter >=3:
  elites[reg_pat] = reg_[reg_pat]

最佳答案

你可以使用apply代替str.contains,它更快:

reg_ = {'anuBavAn':0.35, 'a$piwra':0.2, 'piwra':0.7, 'pa':0.03, 'a':0.0005}

elites = dict()
for reg_pat in reg_:
  if training['concat'].apply(lambda x: reg_pat in x).sum() >= 3:
      elites[reg_pat] = reg_[reg_pat]

print (elites)
{'a': 0.0005}

关于pandas - 在 Pandas 数据框中查找一组子字符串的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403678/

相关文章:

python - 在一行 Pandas 数据框中找到第一个真值

python - Pandas 将新列的元素设置为列表(可迭代)引发 ValueError : setting an array element with a sequence

python-3.x - pandas to_datetime 无法将非零填充字符串转换为日期时间

python - 将多行分配给 Pandas 中的一个索引

python - 随机分配 pandas DataFrame 功能

python - 标准化后的 PIL 逊相关性

python - 使用整数行和标签列修改 pandas DataFrame 中的单个值

python - ValueError : all the input array dimensions for the concatenation axis must match exactly, 但沿维度 2,索引 0 处的数组大小为 3

python - 为什么 groupby().agg(list_funcs) 在 Pandas 中使用函数列表比单独使用它们要花费更多的时间?

python Pandas : sum with string in two dataframe