我有一個 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 < year < 2 時,我想要:cases - 3
然后當 2 < year < 3 時,我想要:cases - 4
當 3 < year < 4 時,我想要:cases - 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]
但這顯然是錯誤的,我不知道該怎么做。
uj5u.com熱心網友回復:
你可以這樣做:
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()
uj5u.com熱心網友回復:
像這樣的東西應該作業:
def my_fun(df, year, factor):
df['cases'][df['year'].astype(int) == year] = df['cases'][df['year'].astype(int) == year] - factor
return df
uj5u.com熱心網友回復:
我會這樣做:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/465340.html
下一篇:使用元組過濾資料框
