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

如何修改Pandas循环列代码,统计同时含两个指定值的行?

解决Pandas大数据集下跨列统计同时包含两个值的行的问题

需求说明

需要统计Pandas DataFrame中同一行任意列同时包含两个指定值的行数,现有代码仅能统计单值出现的次数,需修改循环逻辑满足需求;且因数据集规模过大,无法使用交叉表方法。

原代码

con = pd.read_csv("keyword connections.txt", sep="\t")
key = pd.read_csv("keyword short list.txt", sep="\t")    
text_file = open("Output.txt", "w")
    
i = 0
j = 0
k = 0
for i in range(0,key.size):
    name1 = key.iloc[i]["Keyword"]
    for j in range(0,key.size):
        name2 = key.iloc[j]["Keyword"]
        counts = 0
        for col in con.columns:
            counts += len(con[(con[col]==name1)])
        text_file.write(name1+"\t"+name2+"\t"+str(counts)+"\n")
        j += 1
        k += 1
    i += 1
text_file.close()
print(k)

修改方案

原代码的问题在于:循环列统计单值行数会重复计数同一行(若一行多列含目标值),且未考虑两个值同时存在的条件。改用Pandas向量化操作替代循环列,既高效又能准确统计。

修改后的完整代码

import pandas as pd

con = pd.read_csv("keyword connections.txt", sep="\t")
key = pd.read_csv("keyword short list.txt", sep="\t")    
text_file = open("Output.txt", "w")

k = 0
# 遍历所有关键词组合
for i in range(key.shape[0]):
    name1 = key.iloc[i]["Keyword"]
    for j in range(key.shape[0]):
        name2 = key.iloc[j]["Keyword"]
        
        # 判断每行是否同时包含name1和name2
        if name1 == name2:
            # 若两个关键词相同,统计行内至少出现两次的行数
            counts = (con == name1).sum(axis=1).ge(2).sum()
        else:
            # 若不同,统计行内同时存在两个关键词的行数
            has_name1 = (con == name1).any(axis=1)
            has_name2 = (con == name2).any(axis=1)
            counts = (has_name1 & has_name2).sum()
        
        text_file.write(f"{name1}\t{name2}\t{counts}\n")
        k += 1

text_file.close()
print(k)

关键修改点

  1. 向量化判断替代列循环:

    • (con == name1).any(axis=1):快速生成布尔Series,标记每行是否有任意一列等于name1
    • 两个布尔Series按位与后求和,直接得到同时满足条件的行数,避免重复计数
  2. 处理关键词相同的特殊情况:
    当name1和name2为同一关键词时,统计行内至少出现两次该值的行数,避免误判仅出现一次的行

  3. 移除冗余代码:
    去掉for循环中手动递增的i += 1和j += 1,range迭代已自动处理索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:23:27