Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:获取每行中最小值的列名称,并获取与其余列相比的百分比差异_Python_Pandas - Fatal编程技术网

Python Pandas:获取每行中最小值的列名称,并获取与其余列相比的百分比差异

Python Pandas:获取每行中最小值的列名称,并获取与其余列相比的百分比差异,python,pandas,Python,Pandas,我有一个数据帧: LF RF LR RR 11 22 33 44 23 43 23 12 33 23 12 43 我想完成的是一个计算(目的是确定每行中哪一列的值最低,并确定与其他cols平均值相比的百分比)。 例如: 识别r1中的最小值,即11和列名称(LF)。其余cols平均值为(22+33+44)/3=33。然后我们计算百分比差11/33=0.333 预期产出: LF RF LR RR Min_Col dif(%) 11 22 33 4

我有一个数据帧:

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

我想完成的是一个计算(目的是确定每行中哪一列的值最低,并确定与其他cols平均值相比的百分比)。 例如: 识别r1中的最小值,即11和列名称(LF)。其余cols平均值为(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,仅用于获取执行此计算所需的列):

我的输出:

                            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.999999。。不是0.8204。我尝试复制0.8204的来源,但没有成功。谢谢所有人的帮助和支持

使用
idxmin
df.mask()
df.isin()
df.min()



您只需进行常规计算,最小列由
idxmin

# find the mins in each row
mins = df.min(axis=1)

# compute mean of the other values
other_means = (df.sum(1) - mins).div(df.shape[1]-1)


(mins /other_means)*100
输出:

0    33.333333
1    40.449438
2    36.363636
dtype: float64

首先,我们使用
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

我把文本写在一个名为“textfile.txt”的文件中。这应该是有用的:

import pandas as pd

df= pd.read_csv('textfile.txt', sep = ' ')
df['min']   = df[['LF','RF','LR','RR']].min(axis=1)
df['sum_3'] = df[['LF','RF','LR','RR']].sum(axis=1)- df['min']
df['sum_3_div3'] = df['sum_3']/3

df.idxmin(1)
谢谢,它可以为每一行获取最小值的列名。我仍然停留在如何执行计算Thanx上,这似乎是可行的。。我没有得到我期望的数字,但我相信问题在于我的df的安排方式。我正在修复它,我会再次确认。我没有得到预期的结果,我正在编辑原始问题以显示我的代码和我的输出非常感谢!在我添加了
df['sum\u 3\u div3']=df['min']/(df['sum\u 3']]/3)
之后,这个功能运行得非常好。。救了我一天。Thanx,干杯
0    33.333333
1    40.449438
2    36.363636
dtype: float64
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
import pandas as pd

df= pd.read_csv('textfile.txt', sep = ' ')
df['min']   = df[['LF','RF','LR','RR']].min(axis=1)
df['sum_3'] = df[['LF','RF','LR','RR']].sum(axis=1)- df['min']
df['sum_3_div3'] = df['sum_3']/3