我想通過更新基于 [area] 和 [Date] 列匹配的值來創建一個新資料集 (df3)。
這是兩個資料集。df1 包含更新,df2 包含將使用 df1 資料更新的檔案。如果沒有日期或區域匹配,則 bb、aa 和 cc 值將為 0。
資料
df1
Date area bb aa cc
7/1/2023 Australia 30 0 0
8/1/2023 Australia 50 0 0
4/1/2024 Australia 0 0 12
6/1/2024 Australia 30 0 24
9/1/2024 Australia 0 0 24
11/1/2024 Australia 0 0 24
2/1/2025 Australia 35 0 0
df2
Date area bb aa cc stat
03/1/2023 Australia 5 5 5 yes
06/1/2023 Australia 0 0 0 no
07/1/2023 Australia 0 0 0 yes
08/1/2023 Australia 0 0 0 yes
09/1/2023 Australia 0 0 0 no
10/1/2023 Australia 0 0 0 no
02/1/2024 Australia 0 0 0 no
03/1/2024 Australia 0 0 0 yes
04/1/2024 Australia 0 0 0 yes
05/1/2024 Australia 0 0 0 no
06/1/2024 Australia 0 0 0 no
9/1/2024 Australia 10 10 10 yes
11/1/2024 Australia 10 11 20 yes
2/1/2025 Australia 35 0 0 yes
1/1/2026 Malaysia 7 9 8 no
期望的
我們看到新的資料集值被替換為 df1 值。(查看日期:2023 年 7 月 1 日、2023 年 8 月 1 日等)如果 df1 不包含 df2 值,則將 aa、bb、cc 設定為 0。 (查看 2023 年 3 月 1 日和 2026 年 1 月 1 日的值)
df3
Date area bb aa cc stat
03/1/2023 Australia 0 0 0 yes
06/1/2023 Australia 0 0 0 no
07/1/2023 Australia 30 0 0 yes
08/1/2023 Australia 50 0 0 yes
09/1/2023 Australia 0 0 0 no
10/1/2023 Australia 0 0 0 no
02/1/2024 Australia 0 0 0 no
03/1/2024 Australia 0 0 0 yes
04/1/2024 Australia 0 0 12 yes
05/1/2024 Australia 0 0 0 no
06/1/2024 Australia 30 0 24 no
9/1/2024 Australia 0 0 24 yes
11/1/2024 Australia 0 0 24 yes
2/1/2025 Australia 35 0 0 yes
1/1/2026 Malaysia 0 0 0 no
正在做
我認為最好使用聯接或合并-但是,某些資料沒有被替換
df1["date"] = pd.to_datetime(df1["date"])
df2["date"] = pd.to_datetime(df2["date"])
df3 = pd.merge(left=df1, right=df2, on=["area", "date"], how="right").filter(regex=r".*(?<!_y)$")
df3.columns = df3.columns.str.split("_").str[0]
任何建議表示贊賞。我還在研究。
uj5u.com熱心網友回復:
您可以使用:
# ensure same data
# you could also keep the strings and pad the zeros
df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
keys = ['Date', 'area']
# align df1 on df2's keys and fill with 0s
df3 = (df2[keys ['stat']]
.merge(df1, on=keys, how='left')
.fillna(0, downcast='infer')
[df2.columns] # restore original order
)
輸出:
Date area bb aa cc stat
0 2023-03-01 Australia 0 0 0 yes
1 2023-06-01 Australia 0 0 0 no
2 2023-07-01 Australia 30 0 0 yes
3 2023-08-01 Australia 50 0 0 yes
4 2023-09-01 Australia 0 0 0 no
5 2023-10-01 Australia 0 0 0 no
6 2024-02-01 Australia 0 0 0 no
7 2024-03-01 Australia 0 0 0 yes
8 2024-04-01 Australia 0 0 12 yes
9 2024-05-01 Australia 0 0 0 no
10 2024-06-01 Australia 30 0 24 no
11 2024-09-01 Australia 0 0 24 yes
12 2024-11-01 Australia 0 0 24 yes
13 2025-02-01 Australia 35 0 0 yes
14 2026-01-01 Malaysia 0 0 0 no
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528659.html
