python - Pandas:获取每行中最小值的列名称,并获取与其余列相比的%差异

标签 python pandas

我有一个数据框:

LF  RF  LR  RR  
11  22  33  44  
23  43  23  12  
33  23  12  43

我想要完成的是计算(目的是确定每行中的哪一列具有最低值,并确定与其余列平均值相比的百分比)。 例如: 确定 r1 ​​中的最小值,即 11 和列名称 (LF)。其余列的平均值为 (22+33+44)/3= 33。然后我们计算百分比差异 11/33 = 0.333

预期输出:

LF  RF  LR  RR  Min_Col dif(%)
11  22  33  44  LF      0.333
23  43  23  12  RR      0.404
33  23  12  43  LR      0.364

编写方程的正确方法是:

(min_value)/(sum_rest_of_cols/3)

注意:我需要有一列来指示每一行哪一列是最低的(这是一个识别问题的程序,因此在错误消息中我们希望能够告诉用户它是哪一列,即正在给出问题)

编辑:

我的代码(df_inter 是我定位的原始 df,仅获取执行此计算所需的列):

df_exc = df_inter.loc[:,['LF_Strut_Pressure', 'RF_Strut_Pressure', 'LR_Strut_Pressure' ,'RR_Strut_Pressure']]
    df_exc['dif(%)'] = df_exc.min(1) * 3 / (df_exc.sum(1) - df_inter.min(1))
    df_exc['Min_Col'] = df_exc.iloc[:, :-1].idxmin(1)
    print(df_exc)

我的输出:

                            LF_Strut            RF_Strut           LR_Strut            RR_Strut    dif(%)      Min_Col
truck_id                                                                                                         
EX7057             0.000000           0.000000           0.000000           0.000000    0.0000     LF_Strut
EX7105             0.000000           0.000000           0.000000           0.000000    0.0000     LF_Strut
EX7106             0.000000           0.000000           0.000000           0.000000    0.0000     LF_Strut
EX7107             0.000000           0.000000           0.000000           0.000000    0.0000     LF_Strut
TD6510         36588.000000       36587.000       36587.00000       36587.00    0.8204     RF_Strut
TD6511         36986.000000       36989.000       36987.00000       36989.00    0.8220     LF_Strut
TD6512         27704.000000       27705.000       27702.00000       27705.00    0.7757     LR_Strut

问题是:在计算 TD6510 ( 36587/( (36587 + 36587 + 36588)/3 ) ) = 0.9999999 .. 而不是 0.8204 时。我尝试复制 0.8204 的来源,但没有成功。感谢大家的帮助和支持。

最佳答案

首先我们使用idxmin

df['dif(%)']=df.min(1)*3/(df.sum(1)-df.min(1))
df['Min_Col']=df.iloc[:,:-1].idxmin(1)
df
   LF  RF  LR  RR    dif(%) Min_Col
0  11  22  33  44  0.333333      LF
1  23  43  23  12  0.404494      RR
2  33  23  12  43  0.363636      LR

关于python - Pandas:获取每行中最小值的列名称,并获取与其余列相比的%差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737795/

相关文章:

pandas - 尝试在我的笔记本中查看决策树

python - 当并非所有类别都存在于多个特征和数据集中时的虚拟变量

python - 导出 sklearn 模型以在 R 中运行

python - 如何在不使用循环的情况下反转 Python 中列表的顺序?

python - 使用 Pandas 从遥测数据中识别停靠点

python - 使用条件 cumsum 的自定义聚合

python - 删除或替换 Pandas 数据框中重复行中的值

python - 如何在 Eve 应用程序中使用 add_resource?

python - 使用 html 运行 python

Python - 查找第二小的数字