【问题标题】:Drop from datetime index dataframe rows based in year month day from another dataframe从另一个数据帧中基于年月日的日期时间索引数据帧行删除
【发布时间】:2019-11-18 20:51:11
【问题描述】:

我有一个如下数据框:

                       A     
2014-06-02 09:00:00   ...
2014-06-02 10:00:00   ...
2014-06-02 11:00:00   ...
2014-06-02 12:00:00   ...

2014-06-03 09:00:00   ...
2014-06-03 10:00:00   ...

2014-06-04 11:00:00   ...
2014-06-04 12:00:00   ...

2014-06-05 11:00:00   ...
2014-06-05 12:00:00   ...

还有一个像下面这样的

                       A
2014-06-03 13:14:00   ...
2014-06-04 16:33:00   ...

我需要一个如下数据框:

                       A
2014-06-02 09:00:00   ...
2014-06-02 10:00:00   ...
2014-06-02 11:00:00   ...
2014-06-02 12:00:00   ...
2014-06-05 11:00:00   ...
2014-06-05 12:00:00   ...

即:从第一个数据帧中删除第二个数据帧中具有年月日的每一行

【问题讨论】:

    标签: python python-3.x pandas dataframe datetime


    【解决方案1】:

    你可以使用floor~(反转符号),并检查dfb的索引isin dfa:

    dfa[~dfa.index.floor('D').isin(dfb.index.floor('D'))]
    

    注意两个索引都必须是日期时间数据类型。

    【讨论】:

    • 我想出了和你几乎一样的解决方案 :) +1
    • 为澄清起见,dfa[~dfa.index.isin(dfb.index)] 足以删除与第二个数据帧具有完全相同数据的每一行,floor('D') 采用 datetime 对象并将其“四舍五入”为一天值,所以具有相同“年-月-日”的不同日期时间条目将匹配。如果您的索引不是日期时间类型,它们可以简单地使用dfa.set_index=pd.to_datetime(dfa.index) 进行转换。 `
    • 反转符号是什么意思?
    • ~ 表示 NOT 或将 True 反转为 False 或将 False 反转为 True。 stackoverflow.com/a/8305291/6361531
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多