代码之家  ›  专栏  ›  技术社区  ›  Chopin

使用唯一时间戳的子集df-熊猫

  •  0
  • Chopin  · 技术社区  · 4 年前

    我的目标是只在df中返回与前两个唯一时间戳相关联的行。但是,在下面,我将返回每个时间戳的前两个。

    df1 = pd.DataFrame({  
            'Time' : ['2019-08-02 09:50:10.100','2019-08-02 09:50:10.100','2019-08-02 09:50:10.100','2019-08-02 09:50:10.200','2019-08-02 09:50:10.200','2019-08-02 09:50:10.200','2019-08-02 09:50:10.300','2019-08-02 09:50:10.300','2019-08-02 09:50:10.300'],                                     
            })
    
    df1['Time'] = pd.to_datetime(df1['Time'])
    
    df1 = df1.groupby(['Time']).head(2)
    

                         Time
    0 2019-08-02 09:50:10.100
    1 2019-08-02 09:50:10.100
    2 2019-08-02 09:50:10.200
    3 2019-08-02 09:50:10.200
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Henry Ecker Super Kai - Kazuya Ito    4 年前

    尝试按筛选 groupby ngroup 小于2:

    new_df = df1[df1.groupby('Time').ngroup().lt(2)]
    

    new_df :

                         Time
    0 2019-08-02 09:50:10.100
    1 2019-08-02 09:50:10.100
    2 2019-08-02 09:50:10.100
    3 2019-08-02 09:50:10.200
    4 2019-08-02 09:50:10.200
    5 2019-08-02 09:50:10.200
    

    groupby组

    0    0
    1    0
    2    0
    3    1
    4    1
    5    1
    6    2
    7    2
    8    2
    dtype: int64
    

    然后仅选择与第0次和第1次关联的行( lt 2 )或者( le 1 )


    unique 要获得唯一的时间值,请将前2个时间值切掉,然后使用 isin 要测试时间值:

    new_df = df1[df1['Time'].isin(df1['Time'].unique()[:2])]
    

    新建\u df :

    时间
    0 2019-08-02 09:50:10.100
    1 2019-08-02 09:50:10.100
    3 2019-08-02 09:50:10.200
    5 2019-08-02 09:50:10.200