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

如何在Pandas中用另一列的URL列表对单列URL进行排名?

问题描述

现有如下结构的CSV数据(示例中用字母代替实际URL):

query,ranks
a,"[k, g, y, l, a]"
h,"[f, g, l, h, p]"
x,"[b, x, y, a, g]"
w,"[w, I, b, d, g]"
r,"[I, r, n, f, g]"

需要新增一列rank,记录query中的值在对应ranks列表中的1-based排名,期望输出如下:

query,ranks,rank
a,"[k, g, y, l, a]",5
h,"[f, g, l, h, p]",4
x,"[b, x, y, a, g]",2
w,"[w, I, b, d, g]",1
r,"[I, r, n, f, g]",2

补充说明:ranks列的值是字符串格式的列表,部分行的ranks列表可能不包含对应query的值。

解决方案

使用Python的pandas库可实现需求,步骤如下:

  1. 读取CSV并将ranks列的字符串解析为实际列表
  2. 逐行计算query值在列表中的位置,转换为1-based排名
  3. 处理query不在列表中的异常情况

完整代码示例

import pandas as pd
import ast

# 读取目标CSV文件
df = pd.read_csv("input.csv")

# 解析字符串格式的列表为Python列表
df["ranks_parsed"] = df["ranks"].apply(ast.literal_eval)

# 定义计算排名的函数
def calculate_rank(row):
    target = row["query"]
    lst = row["ranks_parsed"]
    try:
        # 索引从0开始,+1转为1-based排名
        return lst.index(target) + 1
    except ValueError:
        # 若目标不在列表中,返回缺失值pd.NA,也可替换为0/None等自定义值
        return pd.NA

# 生成rank列
df["rank"] = df.apply(calculate_rank, axis=1)

# 删除中间辅助列,保留原列和新生成的rank列
df = df.drop("ranks_parsed", axis=1)

# 将结果保存为新的CSV
df.to_csv("output.csv", index=False)

关键说明

  • ast.literal_eval():安全解析字符串格式的列表,避免eval()带来的安全风险
  • list.index():获取元素在列表中的索引,元素不存在时抛出ValueError,通过try-except捕获并返回缺失值
  • 若需要对query不在列表中的情况做特殊处理,可修改except块的返回值(比如返回0或"未找到")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:30:25