【问题标题】:filter data based on month start and month end根据月初和月底过滤数据
【发布时间】:2021-11-01 02:53:01
【问题描述】:

给定一个具有这种格式的日期列的数据框。

    Date      Group 
 2020-05-18     1
 2020-06-22     1
 2019-07-11     1
 2018-03-01     1
 2021-01-21     2
 2021-05-05     2
 2021-09-11     2

还有两个字符串;

   Start = 2020-05 (indicating month start)
   End = 2021-09   (indicating month end)

我想过滤掉数据,以便数据框中只有开始日期和结束日期内的日期可用。

预期输出:

          Date      Group 
       2020-05-18     1
       2020-06-22     1
       2021-01-21     2
       2021-05-05     2
       2021-09-11     2

【问题讨论】:

    标签: pandas numpy datetime


    【解决方案1】:
    # Creating dummy data
    d = {'dt':['2020-05-18',
      '2020-06-22',
      '2019-07-11',
      '2018-03-01',
      '2021-01-21',
      '2021-05-05', 
      '2021-09-11'], 
      'group':[1,1,1,1,2,2,2]}
    
    dt_df = pd.DataFrame(data=d)
    dt_df
    
    dt_df['dt'] = pd.to_datetime(dt_df['dt'])
    
    dt_df
    

    初始输入:

    0   2020-05-18
    1   2020-06-22
    2   2019-07-11
    3   2018-03-01
    4   2021-01-21
    5   2021-05-05
    6   2021-09-11
    Name: dt, dtype: datetime64[ns]
    

    Start = '2020-05' 
    End = '2021-09' 
    
    Start = pd.to_datetime(Start)
    End = pd.to_datetime(End)
    End = End+np.timedelta64(1, 'M')
    

    使用loc 仅选择StartEnd 时间戳之间的日期。

    dt_df.loc[(dt_df['dt'] - Start >= np.timedelta64(0,'D')) & (dt_df['dt'] - End <= np.timedelta64(0, 'D'))]
    

    输出:

              dt  group
    0 2020-05-18      1
    1 2020-06-22      1
    4 2021-01-21      2
    5 2021-05-05      2
    6 2021-09-11      2
    

    【讨论】:

    • 当我运行它时,日期列显示为 NaT。此外,未考虑组列。 @ceruler
    • 当我运行所有代码(包括我编写的虚拟代码)时,我没有遇到这个问题。您确定该列是熊猫日期时间吗?
    • 也可以使用df[df["Date"].between(Start, pd.Timestamp(End)+pd.offsets.MonthEnd())]
    【解决方案2】:
    df.Date = pd.to_datetime(df.Date)
    Start = datetime.datetime(2020,5,1)
    End = datetime.datetime(2021,9,30)
    df[(df.Date >= Start) & (df.Date <= End)]
    

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 2020-06-23
      • 2014-11-05
      • 2018-03-21
      • 1970-01-01
      相关资源
      最近更新 更多