如何输出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.
相关产品推荐
相关产品推荐

