合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]

Posted

技术标签:

【中文标题】合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]【英文标题】:Merge DataFrames with Matching Values From Two Different Columns - Pandas [duplicate] 【发布时间】:2017-12-23 19:26:54 【问题描述】:

我有两个不同的 DataFrame,我想将它们与 datehours 列合并。我看到了一些threads,但我找不到我的问题的解决方案。我还阅读了this 文档并尝试了不同的组合,但是效果不佳。

我的两个不同 DataFrame 的示例,

DF1

        date    hours        var1            var2 
0   2013-07-10  00:00:00    150.322617  52.225920   
1   2013-07-10  01:00:00    155.250917  53.365296   
2   2013-07-10  02:00:00    124.918667  51.158249   
3   2013-07-10  03:00:00    143.839217  53.138251
 .....  
9   2013-09-10  09:00:00    148.135818  86.676341
10  2013-09-10  10:00:00    147.833517  53.658016   
11  2013-09-10  12:00:00    149.580233  69.745368   
12  2013-09-10  13:00:00    163.715317  14.524894   
13  2013-09-10  14:00:00    168.856650  10.762779   

DF2

       date      hours      myvar1        myvar2 
0   2013-07-10  09:00:00    1.617         98.56 
1   2013-07-10  10:00:00    2.917         23.60 
2   2013-07-10  12:00:00    19.667        36.15 
3   2013-07-10  13:00:00    14.217        45.16
 .....  
20 2013-09-10   20:00:00    1.517         53.56 
21 2013-09-10   21:00:00    5.233         69.47
22 2013-09-10   22:00:00    13.717        14.25
23 2013-09-10   23:00:00    18.850        10.69 

正如您在两个 DataFrame 中看到的,DF209:00:00 开头,我想加入 DF1 09:00:00,这基本上是匹配的日期和时间。到目前为止,我使用以前的线程和上面提到的文档尝试了许多不同的组合。一个例子,

merged_df = DF2.merge(DF1, how = 'left', on = ['date', 'hours'])

这是为右 right DataFrame 引入 NAN 值。我知道,我不必同时使用 datehours 列,但是仍然得到相同的结果。我试过R这样快,效果很好。

merged_df  <- left_join(DF1, DF2, by = 'date')

pandas 中是否有将DatFrames 与匹配值合并而不获取NaN 值?

【问题讨论】:

您的 R 代码和 pandas 代码不匹配。无论哪种方式,请在一个小的 DataFrame 上显示输出(不正确和正确)。 【参考方案1】:

pd.merge 中使用how='inner'

merged_df = DF2.merge(DF1, how = 'inner', on = ['date', 'hours'])

这将执行和“内部连接”,从而省略每个数据帧中不匹配的行。因此,合并数据帧的右侧或左侧都没有 NaN。

【讨论】:

检查所有列的 dtypes 以查找它们匹配的列...日期都是字符串或日期时间,小时数应该是字符串。 @Scott Boston 现在都是object 类型,我要将它们转换为date_time,感谢您的建议 这是一个很棒的解决方案,非常感谢您帮助我!

以上是关于合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何匹配和合并两个具有完全不同值的数据框,数据框列中的数字除外?

合并来自谷歌表格列的记录

将具有两个日期列的一个数据框与另一个具有两个日期列的数据框合并

有没有办法“合并”两列,其中新列的值是具有特定值的原始列的名称,分组明智?

合并具有几个不同列的两个数据框

Pandas 合并具有不同列的两个数据框