Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 3.x 查找max列,从另一列中减去并替换该值_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 查找max列,从另一列中减去并替换该值

Python 3.x 查找max列,从另一列中减去并替换该值,python-3.x,pandas,Python 3.x,Pandas,我有这样一个df: A | B | C | D 14 | 5 | 10 | 5 4 | 7 | 15 | 6 100 | 220 | 6 | 7 对于A、B、C列中的每一行,我希望找到最大值,然后从中减去D列并替换它 预期结果: A | B | C | D 9 | 5 | 10 | 5 4 | 7 | 9 | 6 100 | 213 | 6 | 7 因此,对

我有这样一个df:

 A    |  B     |  C  | D
14    |  5     | 10  | 5
 4    |  7     | 15  | 6
100   | 220    |  6  | 7
对于A、B、C列中的每一行,我希望找到最大值,然后从中减去D列并替换它

预期结果:

 A   |  B   |  C  |  D
 9   |  5   | 10  |  5
 4   |  7   |  9  |  6
100  | 213  |  6  |  7
因此,对于第一行,它将选择14(14,5,10中的最大值),从中减去D列(14-5=9),并替换结果(将初始值14替换为9)

我知道如何找到A、B、C的最大值,并从中找到子域D,但我在更换零件时遇到了麻烦

我想把结果放在另一个名为E的列中,然后再次找到A、B、C的最大值,并替换为E列,但这毫无意义,因为我将尝试为函数调用赋值。还有其他选择吗

#Exmaple df
list_columns = ['A', 'B', 'C','D']
list_data = [ [14, 5, 10,5],[4, 7, 15,6],[100, 220, 6,7]]
df= pd.DataFrame(columns=list_columns, data=list_data)

#Calculate the max and subctract 
df['e'] = df[['A', 'B']].max(axis=1) - df['D']

#To replace, maybe something like this. But this line makes no sense since it's backwards
df[['A', 'B','C']].max(axis=1) = df['D']
用于仅替换通过将筛选列的所有值与最大值进行比较而匹配的最大值:

cols = ['A', 'B', 'C']
s =  df[cols].max(axis=1)
df[cols] = df[cols].mask(df[cols].eq(s, axis=0), s - df['D'], axis=0)
print (df)
     A    B   C  D
0    9    5  10  5
1    4    7   9  6
2  100  213   6  7

我决不会想到这一点。非常感谢。我会尽快接受答案。希望它也能帮助别人