首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas查找最大列,从另一列中减去并替换该值

Pandas查找最大列,从另一列中减去并替换该值
EN

Stack Overflow用户
提问于 2021-01-22 21:59:03
回答 1查看 79关注 0票数 1

我有一个这样的df:

代码语言:javascript
复制
 A    |  B     |  C  | D
14    |  5     | 10  | 5
 4    |  7     | 15  | 6
100   | 220    |  6  | 7

对于列A,B,C中的每一行,我希望找到最大值,并从中减去列D并替换它。

预期结果:

代码语言:javascript
复制
 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列,但这没有任何意义,因为我将尝试为函数调用赋值。还有没有其他的选择呢?

代码语言:javascript
复制
#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']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 22:04:21

使用DataFrame.mask仅替换通过将筛选列的所有值与最大值进行比较而匹配的最大值:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65846579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档