Pandas 使用带有时间列的熊猫数据帧

Pandas 使用带有时间列的熊猫数据帧,pandas,sorting,datetime,series,Pandas,Sorting,Datetime,Series,我正在研究一个大熊猫数据框架,它有一个时间列(排序),我想要的是删除任何重复的日期,并且在1天的增量内(比如说)。除此之外,我还希望创建另一列作为标签(基于时间)。因此,给一个简单的例子(为了简单起见,我只是在这里保留了时间列: df: Time Column 2020-12-05 2020-12-09 2020-12-13 2020-12-18

我正在研究一个大熊猫数据框架,它有一个时间列(排序),我想要的是删除任何重复的日期,并且在1天的增量内(比如说)。除此之外,我还希望创建另一列作为标签(基于时间)。因此,给一个简单的例子(为了简单起见,我只是在这里保留了时间列:

    df:
          
            Time Column

            2020-12-05
            2020-12-09
            2020-12-13
            2020-12-18
            2020-12-21
            2020-12-21
            2020-12-23
            2020-12-24
            2020-12-31
            2021-01-04
因此,我在一个输出数据框中寻找的是这样的(在一天内删除重复项和日期并仅保留第一次出现后-在示例中,我有2020-12-23&2020-12-24,仅保留日期23)并创建一个标签列:

       df:
          
            Time Column        Label

            2020-12-05          L1
            2020-12-09          L2
            2020-12-13          L3
            2020-12-18          L4
            2020-12-21          L5
            2020-12-23          L6
            2020-12-31          L7
            2021-01-04          L8
不知道如何实现这一目标。我们将非常感谢您在这方面提供的任何帮助。

    df['Time_Column']=pd.to_datetime(df['Time_Column'])#Coerce Time_Column to date
    df=df[df['Time_Column'].diff(1).dt.days.ne(1)].drop_duplicates()#Remove consecutive dates and duplicates
    df=df.assign(Label= 'L'+df['Time_Column'].notna().cumsum().astype(str))#Cumsum the Time_Column
    print(df)
    
    
    
       Time_Column Label
    0  2020-12-05    L1
    1  2020-12-09    L2
    2  2020-12-13    L3
    3  2020-12-18    L4
    4  2020-12-21    L5
    6  2020-12-23    L6
    8  2020-12-31    L7
    9  2021-01-04    L8
    
  • 创建一个从时间列中提取日期的新列
  • 在此新列上删除重复项
  • 拆除临时柱

我是这样做的:

  df = pd.DataFrame(dt)
  df['time_column'] = pd.to_datetime(df['time_column'])
  mdf = df.copy()

  mdf = mdf.rename(columns={'time_column': 'date_column'})
  myf = df.diff(periods=1)
  finDF = myf.join(mdf,how='inner')

  mask = ['0 days', '1 days']
  finDF = finDF[~finDF['time_column'].isin(mask)]

  del finDF['time_column']

  finDF=finDF.assign(Label= 
      'L'+finDF['date_column'].notna().cumsum().astype(str))
 finDF

非常感谢@wwnde。除了警告之外,它是有效的。我还需要删除任何连续的日期(df已经排序)在上面的例子中,2020-12-23和2020-12-24中,我只保留2020-12-23。那么我如何才能做到这一点呢?谢谢你的标签部分看到我的编辑完美无瑕。这也很好!谢谢你!比我的解决方案好得多,谢谢你,伊恩。问题是,它删除了重复项,但我也没有ed删除两天以内的日期。在上述示例2020-12-23和2020-12-24中,应保留一个2020-12-23。
  df = pd.DataFrame(dt)
  df['time_column'] = pd.to_datetime(df['time_column'])
  mdf = df.copy()

  mdf = mdf.rename(columns={'time_column': 'date_column'})
  myf = df.diff(periods=1)
  finDF = myf.join(mdf,how='inner')

  mask = ['0 days', '1 days']
  finDF = finDF[~finDF['time_column'].isin(mask)]

  del finDF['time_column']

  finDF=finDF.assign(Label= 
      'L'+finDF['date_column'].notna().cumsum().astype(str))
 finDF