如何在Pandas DataFrame中统计列字符串在另一列的出现次数?
嘿,这两个Pandas的统计需求我帮你搞定!下面分情况给你具体的实现方案,都是在Jupyter Notebook里能直接跑的代码~
需求一:检查某列字符串是否出现在另一列并计数
假设你的DataFrame名为df,需要检查的列是check_col,目标列是target_col。这里提供两种实现思路,优先推荐矢量化操作,效率更高:
方式1:矢量化批量处理(推荐)
不用手动遍历,利用Pandas的字符串方法就能批量完成检查,速度快还简洁:
import pandas as pd # 先造个示例数据,你可以替换成自己的DataFrame df = pd.DataFrame({ 'check_col': ['apple', 'banana', 'orange', 'grape'], 'target_col': ['I like apple', 'Banana is yellow', 'Orange juice', 'No fruit here'] }) # 检查每行的check_col字符串是否在target_col中(加lower()是为了不区分大小写,不需要的话可以去掉) df['is_present'] = df.apply(lambda row: row['check_col'].lower() in row['target_col'].lower(), axis=1) # 统计符合条件的总次数 total_match_count = df['is_present'].sum() print(f"总共有 {total_match_count} 个字符串出现在目标列中")
方式2:显式逐行遍历(适合自定义复杂逻辑)
如果你需要在遍历过程中加一些额外的判断逻辑,就用这种方式:
match_count = 0 for idx, row in df.iterrows(): check_str = row['check_col'] target_str = row['target_col'] # 这里可以加自定义条件,比如区分大小写/部分匹配等 if check_str in target_str: match_count += 1 print(f"匹配成功的总次数:{match_count}")
需求二:统计c2列每个完整字符串在c1列中的出现次数
这里重点是完整字符串匹配,不是子串匹配。我们可以先统计c1列的词频,再快速匹配c2的每个元素,效率拉满:
# 示例数据,替换成你的真实DataFrame即可 df = pd.DataFrame({ 'c1': ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'], 'c2': ['apple', 'orange', 'grape', 'banana'] }) # 第一步:统计c1列中每个完整字符串的出现次数,转成字典方便查询 c1_frequency = df['c1'].value_counts().to_dict() # 第二步:遍历c2列的所有唯一字符串(避免重复统计相同内容),输出结果 for string in df['c2'].unique(): # 用get方法,不存在的字符串返回0 occur_count = c1_frequency.get(string, 0) print(f"完整字符串 '{string}' 在c1列中出现了 {occur_count} 次")
如果你的c2列有重复的字符串,需要每个都打印结果(比如c2里有两个apple,要分别输出),那就直接遍历df['c2']:
for string in df['c2']: occur_count = c1_frequency.get(string, 0) print(f"完整字符串 '{string}' 在c1列中出现了 {occur_count} 次")
内容的提问来源于stack exchange,提问作者mapk
相关产品推荐
相关产品推荐

