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

如何输出Pandas DataFrame前10大值对应的索引与列

解决方法

你的代码存在几个核心问题:

  • 用集合提取值会自动去重,导致相同的最大值被丢弃
  • 嵌套循环只遍历了对角线单元格,没覆盖所有可能的位置
  • 最后试图从单个数值获取index和column属性,这完全不符合Pandas的结构

正确的做法是把DataFrame转换成包含索引、列、值的长格式数据,再排序取前10,最后格式化输出:

import pandas as pd
import numpy as np
from scipy.stats import poisson

def poisson_dist(mean1: float, mean2: float):
    goals_probabilities = np.zeros(shape=(2, 6))
    for i in range(6):
        goals_probabilities[0][i] = poisson.pmf(k=i, mu=mean1)
        goals_probabilities[1][i] = poisson.pmf(k=i, mu=mean2)

    # 简化DataFrame构建逻辑
    main_table = pd.DataFrame(
        data=[[goals_probabilities[0][i] + goals_probabilities[1][j] for j in range(6)] for i in range(6)],
        index=[0,1,2,3,4,5],
        columns=[0,1,2,3,4,5]
    )

    # 转为长格式:行索引、列索引、对应值
    long_format = main_table.stack().reset_index()
    long_format.columns = ['行索引', '列索引', '概率值']

    # 按值降序排序,取前10条
    top_10 = long_format.sort_values(by='概率值', ascending=False).head(10)

    # 格式化输出每个结果
    result_lines = []
    for _, row in top_10.iterrows():
        result_lines.append(f"({row['行索引']}, {row['列索引']}): {row['概率值']:.6f}")
    
    return '\n'.join(result_lines)

# 测试示例
print(poisson_dist(1.5, 2.0))

关键逻辑说明:

  • stack()方法会把列标签转为行索引的一部分,自动生成包含原索引、列和值的Series,再用reset_index()转成结构化DataFrame,避免手动遍历的逻辑错误
  • 直接通过排序取前10,无需手动匹配数值,效率更高且不会遗漏重复值
  • 格式化字符串时可以控制小数位数,让输出更规整

内容的提问来源于stack exchange,提问作者K. M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:59:56