首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫像磁性东西一样合并DataFrames

熊猫像磁性东西一样合并DataFrames
EN

Stack Overflow用户
提问于 2017-01-26 09:01:02
回答 1查看 34关注 0票数 1
代码语言:javascript
运行
复制
import pandas as pd

df1 = pd.DataFrame({'date': ['2015-01-01', '2015-01-10', '2015-01-11', '2015-01-12'], 'a': [1,2,3,4]})

df2 = pd.DataFrame({'date': ['2015-01-01', '2015-01-05', '2015-01-11'], 'b': [10,20,30]})

df = df1.merge(df2, on=['date'], how='outer')

df = df.sort_values('date')

print df

“喜欢磁性的东西”在标题中可能不是一个很好的表达。我将在下面解释。

我希望df2的记录与日期大于或等于df2的df1的第一条记录相匹配。例如,我希望df2的“2015-01-05”与df1的“2015-01-10”相匹配。

我不能通过简单地以innerouterleft的方式合并它们来实现它。不过,上面的结果非常接近我想要的。

代码语言:javascript
运行
复制
     a        date     b
0  1.0  2015-01-01  10.0
4  NaN  2015-01-05  20.0
1  2.0  2015-01-10   NaN
2  3.0  2015-01-11  30.0
3  4.0  2015-01-12   NaN

怎样才能从我所做的或以其他方式从零开始实现这一点呢?

代码语言:javascript
运行
复制
     a        date     b
0  1.0  2015-01-01  10.0
1  2.0  2015-01-10  20.0
2  3.0  2015-01-11  30.0
3  4.0  2015-01-12   NaN
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 09:07:20

确保你的约会是日期

代码语言:javascript
运行
复制
df1.date = pd.to_datetime(df1.date)
df2.date = pd.to_datetime(df2.date)

numpy

np.searchsorted

代码语言:javascript
运行
复制
ilocs = df1.date.values.searchsorted(df2.date.values)
df1.loc[df1.index[ilocs], 'b'] = df2.b.values

df1

   a       date     b
0  1 2015-01-01  10.0
1  2 2015-01-10  20.0
2  3 2015-01-11  30.0
3  4 2015-01-12   NaN

pandas

pd.merge_asof让你非常接近

代码语言:javascript
运行
复制
pd.merge_asof(df1, df2)

   a       date   b
0  1 2015-01-01  10
1  2 2015-01-10  20
2  3 2015-01-11  30
3  4 2015-01-12  30
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41869879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档