You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas统计多列中以指定前三位子串开头的内容出现次数

解决方案

核心修改点是给正则添加开头锚定符:你当前的正则没有限制匹配位置,所以会命中字符串任意位置的目标子串,在正则最开头加^即可,^是正则语法里的字符串起始位置匹配标识,能确保只匹配以目标前缀开头的内容。

修改后的完整代码如下:

import pandas as pd

# 替换为你实际的CSV文件路径
df = pd.read_csv("your_file.csv")

num_list = ["123", "456", "789"]
# 正则开头加^锚定起始位置,r标记原生字符串避免转义异常
rgx = r"^({})".format("|".join(num_list))

# 分别统计三个列的前缀匹配数量,数字无需转小写,移除多余的lower操作
series1_count = df["Series1"].str.extract(rgx).iloc[:, 0].value_counts()
series2_count = df["Series2"].str.extract(rgx).iloc[:, 0].value_counts()
series3_count = df["Series3"].str.extract(rgx).iloc[:, 0].value_counts()

# 可选:汇总三个列的总匹配数量
total_count = pd.concat([series1_count, series2_count, series3_count]).groupby(level=0).sum()

# 输出结果
print("Series1 匹配结果:\n", series1_count)
print("Series2 匹配结果:\n", series2_count)
print("Series3 匹配结果:\n", series3_count)
print("三列总匹配结果:\n", total_count)

额外优化说明

  • 如果你的电话号码数据存在开头带空格的情况,可以将正则调整为rgx = r"^\s*({})".format("|".join(num_list)),\s*会自动匹配0到多个开头的空白字符,避免空格导致的匹配遗漏。
  • 这里用extract替代了原代码的extractall,因为我们只需要匹配开头的前缀,每个字符串最多只会产生一个匹配结果,extract的执行效率更高。

内容的提问来源于stack exchange,提问作者calle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:27:05