首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Python中给定的条件中减去值

从Python中给定的条件中减去值
EN

Stack Overflow用户
提问于 2021-11-10 23:01:25
回答 1查看 70关注 0票数 0

我有一个数据集df,如果这两个列都符合标准,我希望从某一列中减去一个特定的值。以及创建一个包含所减内容的新列。

数据

代码语言:javascript
运行
复制
start   id  q1_avail    q1_used 
50      aa  10          40  
20      bb  5           15  

期望的

代码语言:javascript
运行
复制
start   id  q1_avail    q1_used    delta
50      aa  8           40         2
20      bb  4           15         1

逻辑

我们正在寻找'q1_avail‘列以及id 'aa’。然后,我们从q1_avail列下的10中减去值2,值2是从10中减去的。10-8 =2

代码语言:javascript
运行
复制
mask = df['q1_avail'] 

df.loc[mask, 'q1_avail] -= out['id'].map({'aa':2,
                                          'bb':1,})

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 00:57:29

我将使用普通的.apply(function, axis=1)分别在每一行上运行function,这个function可以使用if/else检查id中的值,更改q1_avail并创建delta

最小工作实例

代码语言:javascript
运行
复制
text = '''start   id  q1_avail    q1_used 
50      aa  10          40  
20      bb  5           15'''

import pandas as pd
import io

df = pd.read_csv(io.StringIO(text), sep="\s+")

def function(row):
    if row['id'] == 'aa':
        row['q1_avail'] -=2
        row['delta'] = 2
    if row['id'] == 'bb':
        row['q1_avail'] -=1
        row['delta'] = 1
    return row

df = df.apply(function, axis=1)

print(df)

结果:

代码语言:javascript
运行
复制
   start  id  q1_avail  q1_used  delta
0     50  aa         8       40      2
1     20  bb         4       15      1

您还可以创建更复杂的function,甚至获取参数,但随后需要使用lambda

代码语言:javascript
运行
复制
def function(row, maps):
    
    row['delta'] = maps[row['id']]
    row['q1_avail'] -= row['delta']

    return row

df = df.apply(lambda row:function(row, {'aa':2, 'bb':1}), axis=1)

编辑:

用你的最后一段代码它可能是

代码语言:javascript
运行
复制
df['delta'] = df['id'].map({'aa': 2, 'bb':1})

df['q1_avail'] = df['q1_avail'] - df['delta']
#df['q1_avail'] -= df['delta']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69921232

复制
相关文章

相似问题

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