首页 > 解决方案 > 如何在熊猫数据框中选择最高值,而不是多次选择同一列和同一行

问题描述

我有一个pandas看起来像这样的数据框:

           0           1           2           3
0   0.371292    0.198658    0.178688    0.164981
1   0.262219    0.461267    0.447531    0.194239
2   0.412508    0.105518    0.254549    0.471136

我想选择n较大的数字,其中n = min(len(df), len(df.columns))与行名和列名一起。条件是所有n数字都必须不同row column彼此不同。

在上面的例子中,数字[0.471136, 0.461267, 0.371292]应该和它们各自的 一起选择(row, column),所以选择[(2,3), (1,1), (0,0)] 的原因0.3712920.447531即使0.447531大于0.412508,是因为row 1之前已经使用过 (for 0.461267)

有没有这样做的pythonic方式?

标签: pythonpython-3.xpandas

解决方案


这是一个解决方案,可以确保您不会从同一行同一列中选择值:

n = min(len(df), len(df.columns))
for i in range(n):
    t = df.reset_index().melt(id_vars="index")
    max_cell = t.iloc[t.value.idxmax()]
    row = max_cell["index"]
    col = max_cell["variable"]
    print(f"max cell is {max_cell}")
    df.drop(row, axis=0, inplace = True)
    df.drop(col, axis=1, inplace = True)

推荐阅读