首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据dataframe中相应的数字,从dataframe中减去数字

根据dataframe中相应的数字,从dataframe中减去数字
EN

Stack Overflow用户
提问于 2022-04-26 18:43:10
回答 3查看 42关注 0票数 1

我有一个由2列组成的数据,比如df:

代码语言:javascript
复制
 year       cases
 1.1         12
 1.2         14
 1.4         19
 1.6         23
 1.6         14
 2.1         26
 2.5         27
 2.7         35
 3.1         21
 3.3         24
 3.8         28

和一份虚假案件的清单,比如f

代码语言:javascript
复制
 f = [3,4,8]

我想写一个代码,这样每+1年,案例的数量被其各自的“假案例”减去。

例如,当1<年份< 2时,我想要:案例-3

那么当2<年份< 3,我要:案例-4

当3<年份< 4,我想:案例-8

诸若此类

所以一个新的专栏,比如说实际案例是:

代码语言:javascript
复制
 year     actual cases
 1.1         9            (12-3)
 1.2         11           (14-3)
 1.4         16           (19-3)
 1.6         20           (23-3)
 1.6         11           (14-3)
 2.1         22           (26-4)
 2.5         23           (27-4)
 2.7         31           (35-4)
 3.1         13           (21-8)
 3.3         16           (24-8)
 3.8         20           (28-8)

我尝试了一些类似的东西

代码语言:javascript
复制
 for i in range(0,df[["year"]:
     if int(df[["year"][i]) > int(df[["year"][i+1]):
         df[["cases"][i] - f[i]

但这显然是错误的,我不知道该怎么办。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-26 19:00:11

我会这样做:

代码语言:javascript
复制
f = [3, 4, 8]

for i, row in df.iterrows():
    if 1<=row["year"]<2:
        df.at[i, "case"] = row["case"] - f[0]
    elif 2<=row["year"]<3:
        df.at[i, "case"] = row["case"] - f[1]
    else:
        df.at[i, "case"] = row["case"] - f[2]

原始数据文件:

代码语言:javascript
复制
   year  case
0   1.0     8
1   1.1     5
2   1.2    17
3   1.3     1
4   1.4    12

结果:

代码语言:javascript
复制
   year  case
0   1.0     5
1   1.1     2
2   1.2    14
3   1.3    -2
4   1.4     9

或者你可以这么做:

代码语言:javascript
复制
df["year"] = df["year"].astype(int)
for i, j in enumerate(f, 1):
    df["case"] - j
票数 0
EN

Stack Overflow用户

发布于 2022-04-26 18:48:23

你可以这样做:

代码语言:javascript
复制
df['cases'] - (df['year']//1).astype(int).map({e:i for e, i in enumerate(f, 1)})

代码语言:javascript
复制
df['cases'] - pd.Series(f).reindex(df['year']//1-1).to_numpy()
票数 1
EN

Stack Overflow用户

发布于 2022-04-26 18:55:59

像这样的事情应该有效:

代码语言:javascript
复制
def my_fun(df, year, factor):
    df['cases'][df['year'].astype(int) == year] = df['cases'][df['year'].astype(int) == year] - factor
    return df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72019016

复制
相关文章

相似问题

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