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

如何修改Pandas函数实现关联列值在结果括号中展示?

修正Pandas函数实现指定列同行值拼接输出

原始代码及输出

import pandas as pd

data = {'Col1': [132, 148, 149], 'Col2': [232, 248, 249], 'Col3': [312, 308, 309], 'Col4': [1500, 1550, 1600], 'Col5': [530, 590, 568]}
df = pd.DataFrame(data)
print(df)

def lrgst(df, cols, n):
    for key, col in df.set_index('Col4')[cols].items():
        x = col.nlargest(n)
        J=', '.join(f'{a}[{b}]' for a,b in zip(x.index, x))
        return J
print(f"{lrgst(df, ['Col1'], 2)}") 

运行输出:

1600[149], 1550[148]

需求说明

需要修改函数,使其能获取指定特殊列(如Col3)中与目标列(如Col1)值同行的数据,将两者拼接在括号内,预期输出:

1600[149,309], 1550[148,308]

问题代码分析

你尝试的代码存在几个问题:

  • 未定义idx变量,无法通过idx.sp_col获取特殊列值
  • sp_col传入的是列表,不能直接用属性访问的方式调用
  • 循环内直接return会导致仅处理第一个目标列就终止函数

修正后的代码

import pandas as pd

data = {'Col1': [132, 148, 149], 'Col2': [232, 248, 249], 'Col3': [312, 308, 309], 'Col4': [1500, 1550, 1600], 'Col5': [530, 590, 568]}
df = pd.DataFrame(data)

def lrgst(df, cols, sp_col, n):
    # 合并目标列和特殊列,设置Col4为索引
    target_df = df.set_index('Col4')[cols + sp_col]
    results = []
    for col_name in cols:
        # 获取当前列的前n大值,保留整行数据
        top_n = target_df.nlargest(n, col_name)
        # 拼接每个条目:索引[目标列值,特殊列值]
        items = [f"{idx}[{row[col_name]},{row[sp_col[0]]}]" for idx, row in top_n.iterrows()]
        results.append(', '.join(items))
    # 返回第一个目标列的结果,若需处理多列可调整返回逻辑
    return results[0]

print(lrgst(df, ['Col1'], ['Col3'], 2))

运行输出:

1600[149,309], 1550[148,308]

关键修正点

  1. 先将目标列和特殊列合并到同一DataFrame,确保能同时获取同行的两个值
  2. 使用iterrows()遍历前n大值的行,直接提取每行的目标列和特殊列数据
  3. 避免循环内提前return,保证所有目标列都能被处理(多目标列场景可扩展返回逻辑)
  4. 针对列表型传入的sp_col,通过索引sp_col[0]获取指定列名(支持多特殊列可调整为遍历拼接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:15