簡體   English   中英

PANDAS:合並具有共同ID的數據幀

[英]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”進行合並/合並。 也許這是一個非常明顯的任務,如果可以的話,我很抱歉(我是新來的),但是我找不到我認為適合該問題的答案,並且想知道那里是否會有一些建議……在此先感謝您思想和貢獻:)

我相信您需要pandas.join

res = df1.join(df2.set_index('DAY'), on='DAY')

並將大小列重命名/將N / A填為0。

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM