Pandas:将数据帧与共同的ID相结合

2024-10-04 01:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,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

洪水并不是每天都有雨,所以我的目标是这样的,当没有任何事件发生时,用0表示:

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”进行合并。也许这是一个非常明显的任务,如果是道歉(我是新来的),但我找不到任何答案,我认为适合的问题,并想知道是否有一些建议在那里。。。提前感谢您的任何想法和贡献:)


Tags: 数据信息目标size记录事件条件df1
3条回答

我相信你需要pandas.join。你知道吗

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

并将size列/fill N/A重命名为0's

使用merge是正确的,但是在执行合并时需要设置how="outer"。你知道吗

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

设置how="left"将返回最左边表中的所有行(本例中为df1),即使df2中没有匹配的记录。对于没有匹配记录的记录,NaN将填充df2列,其中df1中没有记录。你知道吗

看看这能否解决你的意思:

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

相关问题 更多 >