我有一个这样的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']发布于 2021-01-22 22:04:21
使用DataFrame.mask仅替换通过将筛选列的所有值与最大值进行比较而匹配的最大值:
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 7https://stackoverflow.com/questions/65846579
复制相似问题