[英]PANDAS: Combining data frames with IDs in common
我有兩個數據框df1和df2,每個數據框包含不同的信息和不同的長度,但共有一個“ DAY”列,盡管並不總是具有相同的值。 就上下文而言,一個數據框包含降水記錄,另一個數據框包含洪水事件及其大小的記錄。 我想將它們結合起來,以便我可以輕松比較與洪水事件有關的降水條件。 df1(降水)如下所示:
D M Y DAY Tpcp MaxInt
30 9 2010 5553 20.8 2.2
1 10 2010 5554 14 1.8
2 10 2010 5555 61.8 1.8
3 10 2010 5556 30 1.2
4 10 2010 5557 68.4 1
5 10 2010 5558 10.2 1
6 10 2010 5559 82.8 2.2
7 10 2010 5560 54.6 2.2
10 10 2010 5563 11.4 1.8
df2(洪水)如下所示:
D M Y DAY Size
12 5 2009 5047 2
3 9 2009 5161 2
13 4 2010 5383 3
14 4 2010 5384 3
16 7 2010 5477 2
4 10 2010 5557 3
6 10 2010 5559 3
30 4 2011 5765 2
22 5 2011 5787 2
27 5 2011 5792 2
9 11 2011 5958 2
洪水不會全天下雨,所以我的目標是這樣的,零事件發生時為零:
D M Y DAY Tpcp MaxInt FldSz
30 9 2010 5553 20.8 2.2 0
1 10 2010 5554 14 1.8 0
2 10 2010 5555 61.8 1.8 0
3 10 2010 5556 30 1.2 0
4 10 2010 5557 68.4 1 3
5 10 2010 5558 10.2 1 3
6 10 2010 5559 82.8 2.2 0
7 10 2010 5560 54.6 2.2 0
10 10 2010 5563 11.4 1.8 0
同樣,我認為最簡單的方法是根據“ DAY”進行合並/合並。 也許這是一個非常明顯的任務,如果可以的話,我很抱歉(我是新來的),但是我找不到我認為適合該問題的答案,並且想知道那里是否會有一些建議……在此先感謝您思想和貢獻:)
您可以使用merge
,但是執行合並時要設置how="outer"
。
df3 = df1.merge(df2[["DAY", "Size"]], how="left")
設置how="left"
將返回最左側表(在本例中為df1
中的所有行,即使df2
沒有匹配的記錄。 對於沒有匹配記錄的記錄, NaN
將填充df1
沒有記錄的df2
列。
你可以試試:
data = pd.merge(df1,df2, on=['DAY'], how='outer')
看看這是否能解決您的意思:
df = df1.merge(df2, on=['D', 'M', 'Y', 'DAY'], how='left')
df['FldSz'] = df['Size'].fillna(0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.