如何通过pandas DataFrame的单元格值定位其对应的所属行?
解决方法
前置说明
你当前DataFrame索引为2的列数据为逗号作为小数分隔符的字符串格式,直接调用max()方法得到的是字符串字典序排序的结果,并非数值大小的最大值,需要先将该列转换为浮点型数值再做计算。
核心实现代码
替换你原有代码中求最大值的部分即可:
# 将第2列转为浮点型 df[2] = df[2].astype(str).str.replace(',', '.').astype(float) # 取第2列的数值最大值 max_value = df[2].max() # 筛选所有值等于最大值的行 max_value_rows = df[df[2] == max_value] # 若只需取第一个出现最大值的行,可直接用idxmax() first_max_row_index = df[2].idxmax() first_max_row = df.loc[first_max_row_index] # 打印结果验证 print(f"第2列数值最大值为:{max_value}") print("所有匹配最大值的行:") print(max_value_rows) print("第一个最大值对应的行数据:") print(first_max_row)
完整修改后的函数代码
elif Nov == str(15): def b(): from openpyxl import load_workbook import pandas as pd wb = load_workbook(filename='Wind.xlsx', read_only=True) ws = wb['Sheet1'] data_rows = [] for row in ws['34':'81']: data_cols = [] for cell in row: data_cols.append(cell.value) data_rows.append(data_cols) df = pd.DataFrame(data_rows) # 转换列格式+找最大值对应行 df[2] = df[2].astype(str).str.replace(',', '.').astype(float) max_val = df[2].max() max_rows = df[df[2] == max_val] print(f"第2列最大值:{max_val}") print("最大值对应行数据:") print(max_rows) print(df) b()
结果验证
以你提供的示例数据为例,转换后第2列最大值为3.4,对应的行索引为31,行数据为15.11.2021 08:00 131 3.4,和实际数据一致。
内容的提问来源于stack exchange,提问作者Frederik N. Pedersen
相关产品推荐
相关产品推荐

