【问题标题】:Selecting multiple rows in a Pandas df based on an numpy array of datetime64[ns]基于 datetime64[ns] 的 numpy 数组在 Pandas df 中选择多行
【发布时间】:2018-09-25 14:52:02
【问题描述】:

头痛时间。

我有一个数据框,其中一个重要列的类型为“datetime64[ns]”。有 >1500000 行,日期时间列包含大约 3000 个唯一的“开始时间”(一台设备的运行)。

在执行了一些groupbys 和数据分析之后,我有大约 30 次感兴趣的运行(可通过它们的运行/开始时间识别)。analysis_df.start_time.unique() 创建这些日期时间的 numpy 数组。

我想用来提取这大约 30 次运行的原始数据,并希望使用 isin a la Filter dataframe rows if value in column is in a set list of values,但是我和ISIN function does not work for dates 发生了冲突,我有点卡住了。

我研究过转换格式: Converting between datetime, Timestamp and datetime64 但韦斯将这方面称为“地狱”这一事实并没有让我充满希望! https://stackoverflow.com/a/13753918/2658194

任何有关如何实现此“过滤器”的帮助将不胜感激 - 如果有人有不同(更好!)的方法,我很乐意改变。

谢谢

【问题讨论】:

    标签: python pandas numpy datetime


    【解决方案1】:

    ISIN 函数不适用于日期

    那不是真的。你引用的问题是5岁。您可以使用列表、系列或数组。这是一个演示,在 Pandas 0.19.2 上测试。

    df = pd.DataFrame({'A': pd.to_datetime(['2018-01-01', '2018-11-30', '2018-12-24'])})
    
    L = ['2018-01-01', '2018-12-24']
    S = pd.to_datetime(L)
    A = S.values
    
    res1 = df[df['A'].isin(L)]
    res2 = df[df['A'].isin(S)]
    res3 = df[df['A'].isin(A)]
    
    assert (res1.values == res2.values).all()
    assert (res1.values == res3.values).all()
    
    print(res1)
    
    #            A
    # 0 2018-01-01
    # 2 2018-12-24
    

    【讨论】:

    • 很尴尬,是的,这确实有效 - 我一直在尝试解决方法,将数组转换为列表,然后使用它,并得到大量错误。我刚刚把它作为一个数组留下了,它已经工作了。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2019-12-12
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多