python - 使用 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方法?
解决方案
去掉.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]_')
推荐阅读
- python - 从另一个数据帧计算日期之间的出现次数(给定 ID 值)
- android - Android 依赖 'androidx.localbroadcastmanager:localbroadcastmanager' 有不同的编译版本 (1.0.0-rc01) Flutter
- spring-boot - 无法将执行器启用到 Spring Cloud 网关格林威治
- r - Duplicating a row in a data-frame n number of times with positional spec
- asp.net-core-mvc - Values changed in inputs on one tab are echoed and overwrite values on other tabs
- numpy - input reshape problem about using tf.layers.conv3d
- reactjs - 在画布上进行文本处理后提取图像数据url,并在Material-UI的CardMedia中显示结果
- vuejs2 - 事件和自引用组件 vue.js
- c - 在不运行合成器的情况下使用 x11 协议获取覆盖窗口需要什么?
- google-apps-script - 编写用于删除工作表数据创建的日历项目的代码