在最近的过去日期合并 2 个数据框

     2023-03-11     96

关键词:

【中文标题】在最近的过去日期合并 2 个数据框【英文标题】:Merge 2 dataframes on closest past date 【发布时间】:2018-03-21 06:27:50 【问题描述】:

我有 2 个数据框,第 0 列是“日期”。

次要日期比主要日期多,并且它们不同(尽管时间很接近)。

我想合并两个数据框,保留主要日期作为参考,并根据主要日期之前的直接日期选择要合并的次要日期(行)。

main = pd.DataFrame('Date':pd.to_datetime(
      ['2013-07-23', '2013-10-28', '2014-01-27', '2014-04-23',
       '2014-07-22', '2014-10-20', '2015-01-27', '2015-04-27',
       '2015-07-21', '2015-10-27', '2016-01-26', '2016-04-26', '2016-07-26'] ) )

         Date
0  2013-07-23
1  2013-10-28
2  2014-01-27
3  2014-04-23
4  2014-07-22
5  2014-10-20
6  2015-01-27
7  2015-04-27
8  2015-07-21
9  2015-10-27
10 2016-01-26
11 2016-04-26
12 2016-07-26

sec = pd.DataFrame('Date':pd.date_range('2013-07-01',periods=42,freq='1MS'))

         Date
0  2013-07-01
1  2013-08-01
2  2013-09-01
3  2013-10-01
...

38 2016-09-01
39 2016-10-01
40 2016-11-01
41 2016-12-01

日期应与此逻辑合并,但仅保留 Date Main 和两个数据框的其余列:

(按时间倒序排列)

MERGED
      Date Main    Date Secondary
0     2016-07-26   2016-07-01
1     2016-04-26   2016-04-01
2     2016-01-26   2016-01-01
3     2015-10-27   2015-10-01
4     2015-07-21   2015-07-01
5     2015-04-27   2015-04-01
6     2015-01-27   2015-01-01
7     2014-10-20   2014-10-01
8     2014-07-22   2014-07-01
9     2014-04-23   2014-04-01
10    2014-01-27   2014-01-01
11    2013-10-28   2013-10-01
12    2013-07-23   2013-07-01

我找到的解决方案与合并 2 个最接近的日期有关,但在这种情况下,最接近的可能意味着违反“过去”条件的主要日期之后的次要日期。

Merge dataframe on closest date

这个看起来很相似,虽然我不知道如何将它应用到我的案例中。

How to merge two dataframes based on the closest (or most recent) timestamp

【问题讨论】:

pd.merge_asof() 感谢@djk47463!我看到有一个参数 tolerance=pd.Timedelta(),但如果我理解正确,它会找到最接近的值(可能是未来)。如何让它回到过去? 它只适用于过去最接近的,查看allow_exact_matches参数 @djk47463 从 pandas 0.20 开始,您可以将方向设置为向后(默认)、向前或最近。这个问题当然没关系,因为OP无论如何都想要向后退,仅供参考 【参考方案1】:

试试merge_asof

df = pd.merge_asof( main.set_index('Date').sort_index(),
                    sec.set_index('Date',drop=False).sort_index(),
                    left_index=True, 
                    right_index=True,
                    direction='backward')  # backward is the default, so you
                                           # can leave this out if you prefer

df.rename(columns='Date':'Date_sec')\
  .sort_index(ascending=False).reset_index()

语法说明:drop=False 是确保保留辅助数据帧的日期所必需的。没有它,合并的数据框将只包含主数据框的日期。

结果:

         Date   Date_sec
0  2016-07-26 2016-07-01
1  2016-04-26 2016-04-01
2  2016-01-26 2016-01-01
3  2015-10-27 2015-10-01
4  2015-07-21 2015-07-01
5  2015-04-27 2015-04-01
6  2015-01-27 2015-01-01
7  2014-10-20 2014-10-01
8  2014-07-22 2014-07-01
9  2014-04-23 2014-04-01
10 2014-01-27 2014-01-01
11 2013-10-28 2013-10-01
12 2013-07-23 2013-07-01

【讨论】:

非常感谢,由于某种原因我收到 TypeError: merge_asof() got an unexpected keyword argument 'direction' @Diego 你可能有一个旧版本的熊猫。我相信 direction 是在 0.20.0 中添加的,但 backward 是默认设置,因此您可能可以将其关闭。我只是为了清楚起见才在此处添加它,因为即使在不必要的情况下,有时也最好明确地使用关键字参数。 你是对的!熊猫升级了。现在我收到 TypeError:'NoneType' 对象在 right_index=True 上不可调用。研究过,但找不到任何线索…… @Diego 我不确定,但这可能是数据问题。我编辑了您的问题以包含用于创建两个数据框的代码。看看这是否对您有用,如果它确实有效:(1)检查您的真实数据是否具有“日期”的 datetime dtype,(2)检查缺失值 NaN 或 NaT(不是时间)。您的消息似乎表明在没有你的数据的情况下,我可以猜测到某处缺少值 感谢您的编辑!我执行了 dropna 和 pd.notnull 检查,甚至 np.inf 并且仍然得到相同的错误。我会继续检查...

python - 如何在python pandas中按日期和时间合并2个数据框?

】python-如何在pythonpandas中按日期和时间合并2个数据框?【英文标题】:Howtomerge2dataframebydateandtimeinpythonpandas?【发布时间】:2021-10-2313:32:01【问题描述】:我想按日期和时间匹配2个数据帧的某些部分,并将它们合并到其中之一。... 查看详情

在几天内按日期合并 2 个 Pandas 数据框?

】在几天内按日期合并2个Pandas数据框?【英文标题】:Merge2Pandasdataframesbydateswithinafewdaysofeachother?【发布时间】:2018-08-1105:17:31【问题描述】:我有这两个从在线数据中创建和清理的pandas数据框,我试图根据它们的日期合并它们... 查看详情

按 3 列和日期范围合并 2 个数据框

】按3列和日期范围合并2个数据框【英文标题】:Merge2dataframesby3columnsandrangeofadate【发布时间】:2019-06-0610:59:39【问题描述】:我有两个要合并的数据框,其中一个我有产品销售情况productquantityclientdatedoor0810071043002014-01-0540181007104... 查看详情

合并 2 个年、月、日、小时日期不等的数据框

】合并2个年、月、日、小时日期不等的数据框【英文标题】:Merge2DataframeswithUnequalDatesofYear,Month,Day,Hour【发布时间】:2021-11-1707:29:22【问题描述】:我一直在寻找如何合并2个日期不等的数据框。每个日期列都是年、月、日、小... 查看详情

按日期不等的日期合并数据框

】按日期不等的日期合并数据框【英文标题】:MergeDataFramesByDateWithUnequalDates【发布时间】:2018-10-0108:37:51【问题描述】:我的流程是这样的:导入包含日期、激活和取消的数据的csv通过激活或取消对数据进行子集化使用aggfunc\'su... 查看详情

在列表中的元素上“合并”2个数据框? - 双键

...在df8中翻倍,因此为了能够区分各个文本,我创建了一个日期。df8=pd.DataFrame(\'Da 查看详情

在列表中的元素上“合并”2个数据框?

】在列表中的元素上“合并”2个数据框?【英文标题】:\'merge\'2dataframesonelementsfromlist?【发布时间】:2019-11-0311:35:55【问题描述】:我想做以下合并(难以用语言描述):这是我的数据框df8=pd.DataFrame(\'names\':[[\'Hans\',\'Meier\'],[\'D... 查看详情

Pandas 合并名称和最近日期

】Pandas合并名称和最近日期【英文标题】:PandasMergeonNameandClosestDate【发布时间】:2014-08-2803:57:05【问题描述】:我正在尝试合并名称和最接近日期的两个数据框(WRT左侧数据框)。在我的研究中,我发现了一个类似的问题here,... 查看详情

根据日期时间索引合并两个数据框(不同大小)

】根据日期时间索引合并两个数据框(不同大小)【英文标题】:Mergetwodataframes(differentsizes)basedondatetimeindex【发布时间】:2020-06-2514:20:41【问题描述】:我有两个数据框,比如说形状为(2000*4)的df_1和形状为(69*4)的df_2。df_1的数据... 查看详情

从 R 中的两个数据框中选择参考日期之后的最近日期

】从R中的两个数据框中选择参考日期之后的最近日期【英文标题】:SelectthemostrecentdateafterthereferencedatefromtwodataframesinR【发布时间】:2020-05-2307:13:38【问题描述】:我正在使用R,我有两个数据集,一个包含参考日期(癌症诊断日... 查看详情

在 PostgreSQL 中有效地合并最近日期的两个数据集

】在PostgreSQL中有效地合并最近日期的两个数据集【英文标题】:MergingtwodatasetsonclosestdateefficientlyinPostgreSQL【发布时间】:2014-11-0817:47:59【问题描述】:我尝试在最近的日期合并两个具有不同时间分辨率的表。表格是这样的:表1... 查看详情

在 pandas 和条件下合并 2 个数据框

】在pandas和条件下合并2个数据框【英文标题】:merge2dataframesinpandasandwithcondition【发布时间】:2016-09-1211:01:11【问题描述】:我有两个DataFramedf1;columns-a,b,cdf2;columns-d,e我想mergedf1与df1.a=df2.d上的df2左连接,并在pd.isnull(e,c)的结果上... 查看详情

垂直合并2个数据框[重复]

】垂直合并2个数据框[重复]【英文标题】:merging2dataframesvertically[duplicate]【发布时间】:2017-05-0202:18:01【问题描述】:我有2个数据框,每个数据框有2列(相同的列名)。我想将它们垂直合并以最终获得一个新的数据框。做的时... 查看详情

熊猫:如何在偏移日期合并两个数据框?

】熊猫:如何在偏移日期合并两个数据框?【英文标题】:Pandas:howtomergetwodataframesonoffsetdates?【发布时间】:2015-08-0923:14:06【问题描述】:我想根据df2行是否在df1行之后的3-6个月日期范围内合并两个数据框df1和df2。例如:df1(对... 查看详情

pandas - 合并日期列不起作用

】pandas-合并日期列不起作用【英文标题】:pandas-Mergingondatecolumnsisnotworking【发布时间】:2020-08-1800:21:01【问题描述】:你好***社区。我在尝试在共享相同日期列的两个数据框之间进行简单合并时遇到问题。抱歉,我是python新手... 查看详情

Pandas - 如何在不同格式的日期时间列上合并数据框?

】Pandas-如何在不同格式的日期时间列上合并数据框?【英文标题】:Pandas-howtomergedataframesondatetimecolumnofdifferentformat?【发布时间】:2019-12-1323:38:14【问题描述】:我有两个需要根据日期合并的数据框。第一个数据框如下所示:Time... 查看详情

在数据框中编辑日期以在熊猫中显示年份

】在数据框中编辑日期以在熊猫中显示年份【英文标题】:EditingDateinDataframetoshowYearinpandas【发布时间】:2016-10-1020:39:37【问题描述】:我在pandas中加载了2个数据面板作为df:df1:df2:它们都具有相同的年份/国家/地区,但第一个具... 查看详情

在特定 ID 列上合并两个 DataFrame(数据集)但具有日期条件

...可以颁发更多的证书,因为他们可以更新它。另一个包含最近10年房屋的所有交 查看详情