合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]
Posted
技术标签:
【中文标题】合并具有来自两个不同列的匹配值的 DataFrame - Pandas [重复]【英文标题】:Merge DataFrames with Matching Values From Two Different Columns - Pandas [duplicate] 【发布时间】:2017-12-23 19:26:54 【问题描述】:我有两个不同的 DataFrame,我想将它们与 date
和 hours
列合并。我看到了一些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 中看到的,DF2
以 09:00:00
开头,我想加入 DF1
09:00:00
,这基本上是匹配的日期和时间。到目前为止,我使用以前的线程和上面提到的文档尝试了许多不同的组合。一个例子,
merged_df = DF2.merge(DF1, how = 'left', on = ['date', 'hours'])
这是为右 right
DataFrame 引入 NAN
值。我知道,我不必同时使用 date
和 hours
列,但是仍然得到相同的结果。我试过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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何匹配和合并两个具有完全不同值的数据框,数据框列中的数字除外?
将具有两个日期列的一个数据框与另一个具有两个日期列的数据框合并