首页 > 解决方案 > 使用 Pandas 中的 apply 函数来使用每行的正则表达式计数

问题描述

我有一个具有以下结构的 Pandas df:

Store CID          UnitsOH                                        Count

1   23095   17_17_17_16_16_15_15_15_15_15_13_12_10_9_8_7_7...   15982

23101   6_6_5_5_5_5_4_3_3_3_7_6_5_5_5_5_5_5_3_2_2_5_5_...   15982

23117   6_6_6_6_6_6_6_6_6_6_6_6_5_5_5_4_3_3_3_3_3_3_3_...   15982

23161   6_6_6_6_6_6_6_6_6_6_6_5_5_5_4_4_4_4_4_3_3_3_3_...   15982

23222   5_5_5_5_5_5_5_5_4_4_4_4_3_3_3_3_3_3_3_3_3_3_7_...   15982

我需要计算特定模式在“Units OH”列上发生了多少次。例如,需要计算每行有多少次有任何正数后跟 0。我在连接字段时使用了“_”分隔符,所以我正在寻找 ' [1-9] [0]的模式__' (对不起格式......第一次在这里发帖,不明白如何正确格式化文本)。

我使用这段代码创建了最后一列名为“计数”:


ConcatOH['Count'] = ConcatOH['Units_OH'].str.count('_[1-9]_[0]_').sum()

但是,如您所见,似乎计数正在计算整个数据帧,并为每一行提供相同的计数。我怎样才能只按行计数。是否有我可以在某处使用的axis = 0参数,或者有人可以帮助我如何使用apply方法?

标签: pythonregexpandas

解决方案


去掉.sum()末尾的ConcatOH['Units_OH'].str.count('_[1-9]_[0]_').sum()

ConcatOH['Units_OH'].str.count('_[1-9]_[0]_')返回一个系列,然后将其相加以获得一个 int 并分配给ConcatOH['Count']因此为什么每行都有相同的值

你基本上在做

ConcatOH['Count'] = 15982

你要

ConcatOH['Count'] = ConcatOH['Units_OH'].str.count('_[1-9]_[0]_')


推荐阅读