PANDAS:将数据帧与共同的ID组合在一起

时间:2018-07-13 11:50:23

标签: python pandas dataframe merge

我有两个数据框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”进行合并/合并。也许这是一个非常明显的任务,如果可以的话,我很抱歉(我是新来的),但是我找不到我认为适合该问题的答案,并且想知道那里是否会有一些建议……在此先感谢您思想和贡献:)

4 个答案:

答案 0 :(得分:1)

我相信您需要pandas.join

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

,然后将大小列重命名/将N / A填为0。

答案 1 :(得分:1)

您正确使用merge,但是您希望在执行合并时设置how="outer"

df3 = df1.merge(df2[["DAY", "Size"]], how="left")

设置how="left"将返回最左侧表(在这种情况下为df1)中的所有行,即使df2中没有匹配的记录。对于没有匹配记录的记录,NaN将填充df2中没有记录的df1列。

答案 2 :(得分:0)

您可以尝试:

[(UINavigationController *)self.view.window.rootViewController popViewControllerAnimated:YES];

答案 3 :(得分:0)

看看这是否能解决您的意思:

df = df1.merge(df2, on=['D', 'M', 'Y', 'DAY'], how='left')
df['FldSz'] = df['Size'].fillna(0)