我有兩個這樣的資料框
df1
date value
0 2019-Jan 200
1 2019-Feb 200
2 2019-Mrz 300
3 2019-Apr 300
4 2019-Mai 400
5 2019-Jun 400
6 2019-Jul 500
7 2019-Aug 500
8 2019-Sep 600
9 2019-Okt 600
10 2019-Nov 700
11 2019-Dez 700
df2
date value
0 2020-Jan 100
1 2020-Feb 200
2 2020-Mrz 300
3 2020-Apr 100
4 2020-Mai 200
5 2020-Jun 300
6 2020-Jul 100
7 2020-Aug 200
8 2020-Sep 300
9 2020-Okt 100
10 2020-Nov 200
11 2020-Dez 300
12 2021-Jan 100
13 2021-Feb 200
14 2021-Mrz 300
15 2021-Apr 100
16 2021-Mai 200
17 2021-Jun 300
18 2021-Jul 100
19 2021-Aug 200
20 2021-Sep 300
我想得到的是一個新的資料框,其中 df2 中的每個月與 df1 中的相應月份都有差異。它應該是這樣的
輸出
date value
0 2020-Jan -100
1 2020-Feb 0
2 2020-Mrz 0
3 2020-Apr -200
4 2020-Mai -200
5 2020-Jun -100
6 2020-Jul -400
7 2020-Aug -300
8 2020-Sep -300
9 2020-Okt -500
10 2020-Nov -500
11 2020-Dez -400
12 2021-Jan -100
13 2021-Feb 0
14 2021-Mrz 0
15 2021-Apr -200
16 2021-Mai -200
17 2021-Jun -100
18 2021-Jul -400
19 2021-Aug -300
20 2021-Sep -300
隨著 df2 隨著時間的推移變得越來越大(當 10 月、11 月、12 月值進來時),我希望有一個解決方案,無論 df2 中的行數是多少,它都能繼續作業。我想知道是否有辦法從 df2 的前十二行中減去 df1,然后從第 13 行及以下開始。
(顯然,在實際資料中,數字不像本例那樣均勻分布)
uj5u.com熱心網友回復:
new_col = df2['value'].sub(df2['date'].str.split('-').str[-1].map(dict(zip(df1['date'].str.split('-').str[-1], df1['value']))))
輸出:
>>> new_col
0 -100
1 0
2 0
3 -200
4 -200
5 -100
6 -400
7 -300
8 -300
9 -500
10 -500
11 -400
12 -100
13 0
14 0
15 -200
16 -200
17 -100
18 -400
19 -300
20 -300
dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376272.html
