我有一个由2列组成的数据,比如df:
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
f = [3,4,8]我想写一个代码,这样每+1年,案例的数量被其各自的“假案例”减去。
例如,当1<年份< 2时,我想要:案例-3
那么当2<年份< 3,我要:案例-4
当3<年份< 4,我想:案例-8
诸若此类
所以一个新的专栏,比如说实际案例是:
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)我尝试了一些类似的东西
for i in range(0,df[["year"]:
if int(df[["year"][i]) > int(df[["year"][i+1]):
df[["cases"][i] - f[i]但这显然是错误的,我不知道该怎么办。
发布于 2022-04-26 19:00:11
我会这样做:
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]原始数据文件:
year case
0 1.0 8
1 1.1 5
2 1.2 17
3 1.3 1
4 1.4 12结果:
year case
0 1.0 5
1 1.1 2
2 1.2 14
3 1.3 -2
4 1.4 9或者你可以这么做:
df["year"] = df["year"].astype(int)
for i, j in enumerate(f, 1):
df["case"] - j发布于 2022-04-26 18:48:23
你可以这样做:
df['cases'] - (df['year']//1).astype(int).map({e:i for e, i in enumerate(f, 1)})或
df['cases'] - pd.Series(f).reindex(df['year']//1-1).to_numpy()发布于 2022-04-26 18:55:59
像这样的事情应该有效:
def my_fun(df, year, factor):
df['cases'][df['year'].astype(int) == year] = df['cases'][df['year'].astype(int) == year] - factor
return dfhttps://stackoverflow.com/questions/72019016
复制相似问题