如何获取Pandas DataFrame各列的最小值、最大值及对应行索引?
获取Pandas DataFrame各列的最小值和最大值(含对应行标签)
首先,先还原你的DataFrame方便后续操作:
import pandas as pd data = { 'achaea': [-22.141701, -13.403537, -20.933825, -8.490766, -17.376165], 'bacteria': [-27.891441, -21.490028, -14.761891, -9.910195, -18.653078], 'plastids': [-2.474725, -0.403491, 4.681494, 1.150736, -1.525354], 'mitochondrion': [0.262533, -0.271403, -0.098965, -0.005730, -0.708633], 'viruses': [0.026349, -0.243087, 0.088650, 0.508743, -1.917676] } df = pd.DataFrame(data, index=['CTAG', 'GGCC', 'GATC', 'CATG', 'TAAG'])
你需要的是同时获取每列的极值(最小/最大)以及对应的行索引(比如CTAG、TAAG这类标签),并按指定格式输出。你之前尝试的df.min()只能拿到值,单独用idxmin()只能针对单列,循环的方式又没对应对关系,这里给你两个简洁的实现方法:
方法一:使用apply遍历列处理
获取最小值及对应行标签
# 对每一列,提取最小值对应的行索引和数值 min_details = df.apply(lambda col: pd.Series([col.idxmin(), col.min()], index=['row_label', 'min_value'])) # 按你想要的格式输出 print("最小值:") for col_name in min_details.columns: row = min_details[col_name]['row_label'] val = min_details[col_name]['min_value'] print(f"{col_name} {row} {val}")
输出结果:
最小值: achaea CTAG -22.141701 bacteria CTAG -27.891441 plastids CTAG -2.474725 mitochondrion TAAG -0.708633 viruses TAAG -1.917676
获取最大值及对应行标签
只需要把idxmin()换成idxmax(),min()换成max()即可:
max_details = df.apply(lambda col: pd.Series([col.idxmax(), col.max()], index=['row_label', 'max_value'])) print("\n最大值:") for col_name in max_details.columns: row = max_details[col_name]['row_label'] val = max_details[col_name]['max_value'] print(f"{col_name} {row} {val}")
输出结果:
最大值: achaea CATG -8.490766 bacteria CATG -9.910195 plastids GATC 4.681494 mitochondrion CTAG 0.262533 viruses CATG 0.508743
方法二:使用agg聚合函数
如果你想更紧凑地获取结果,可以用agg同时指定两个聚合操作:
min_result = df.agg({ 'row_label': lambda x: x.idxmin(), 'min_value': lambda x: x.min() }).T # 转置后列名就是原DataFrame的列,更方便输出 max_result = df.agg({ 'row_label': lambda x: x.idxmax(), 'max_value': lambda x: x.max() }).T
之后同样可以用循环输出成你想要的格式,效果和方法一完全一致。
为什么你之前的循环不对?
你之前的循环for col, idx in zip(df.columns, df.index):是把列名和行索引一一对应遍历,这完全是错位的——我们需要的是针对每一列,找到该列中极值对应的行索引,而不是把列和行按顺序配对。
内容的提问来源于stack exchange,提问作者Paulo Sergio Schlogl
相关产品推荐
相关产品推荐

