代码之家  ›  专栏  ›  技术社区  ›  Anna Ortega

根据日期时间范围为pandas数据帧分配列值

  •  0
  • Anna Ortega  · 技术社区  · 2 年前

    我有一个字典,其中包含一个标签作为关键字,列表中的开始和结束日期时间作为值。

    d = {'A': [2020-01-01 00:00:00+00:00, 2024-01-24 00:00:00+00:00]}
    

    我有一个包含时间列的数据帧。如果时间列中的日期时间在字典中的开始和结束日期时间的范围内,我想为数据帧分配一个标签。完成后会是这样。

    ID  time                       Label
    1   2024-01-23 00:00:00+00:00  A
    

    如果我只处理日期,我可以使用以下代码:

    for k, (s, e) in d.items():
        df.loc[df["time"].isin(pd.date_range(s, e)), 'Label'] = k
    

    但是,pd.date_range函数不适用于日期时间。如何将此代码修改为时间范围而不是日期范围?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Ahmed Sayed    2 年前

    您可以使用pd.Series.between方法,而不是pd.date_range和isin

    这是一个例子

    import pandas as pd
    
    #dict
    d = {'A': ['2020-01-01 00:00:00+00:00', '2024-01-24 00:00:00+00:00']}
    
    # Let's convert strings to datetime
    for k, (start, end) in d.items():
      d[k] = [pd.to_datetime(start), pd.to_datetime(end)]
    
    #df
    df = pd.DataFrame({
    'ID': [1, 2, 3],
    'time': pd.to_datetime(['2024-01-23 00:00:00+00:00', '2025-01-23 
     00:00:00+00:00', '2019-01-23 00:00:00+00:00'])
     })
    
    # Assign labels
    for k, (s, e) in d.items():
       df.loc[df["time"].between(s, e), 'Label'] = k
    
    print(df)