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

按列清除数据帧条件

  •  4
  • PeCaDe  · 技术社区  · 7 年前

    我只想保留 Dataframe col1 = 0, col2 = 1 col1 = 0, col2 = 2 .

    import pandas as pd
    
    pd.DataFrame({'id':['id1','id1','id1','id1','id1','id1','id1','id1','id1','id1','id1','id2','id2','id2','id2','id2']
                      ,'col1':[0,1,1,0,1,0,0,1,1,0,0,1,0,0,1,1],'col2':[1,2,2,1,2,2,1,2,2,2,1,2,2,1,2,2]})
    

    这看起来像这样:

        col1 col2 id
    0   0   1   id1
    1   1   2   id1
    2   1   2   id1
    3   0   1   id1
    4   1   2   id1
    5   0   2   id1
    6   0   1   id1
    7   1   2   id1
    8   1   2   id1
    9   0   2   id1
    10  0   1   id1
    11  1   2   id2
    12  0   2   id2
    13  0   1   id2
    14  1   2   id2
    15  1   2   id2
    

    输出样本

    0-1,0-2 在里面 col1,col2 .

       col1 col2 id
    3   0   1   id1
    4   1   2   id1
    5   0   2   id1
    6   0   1   id1
    7   1   2   id1
    8   1   2   id1
    9   0   2   id1
    10  0   1   id1
    11  1   2   id2
    12  0   2   id2
    

    因此,删除了行0,1,2,13,14,15,因为它们不是0-1,0-2间隔内的a。

    1 回复  |  直到 7 年前
        1
  •  3
  •   BENY    7 年前

    通过使用新的段落 group (使用 df.drop('group',1) )


    设置

    df['group']=(df.col1==0)&(df.col2==1)
    df['group']=df['group'].cumsum()
    

    mask=df.groupby('group').apply(lambda x : sum((x.col1==0)&(x.col2==2)))
    df.loc[df.group.isin(mask[mask.eq(1)].index)]
    
    
    Out[363]: 
        col1  col2   id  group
    3      0     1  id1      2
    4      1     2  id1      2
    5      0     2  id1      2
    6      0     1  id1      3
    7      1     2  id1      3
    8      1     2  id1      3
    9      0     2  id1      3
    10     0     1  id1      4
    11     1     2  id2      4
    12     0     2  id2      4
    

    选项2案例提供方

    mask=df.groupby('group').last().loc[lambda x : (x.col1==0)&(x.col2==2),].index
    df.loc[df.group.isin(mask)]
    
    
    Out[379]: 
        col1  col2   id  group
    3      0     1  id1      2
    4      1     2  id1      2
    5      0     2  id1      2
    6      0     1  id1      3
    7      1     2  id1      3
    8      1     2  id1      3
    9      0     2  id1      3
    10     0     1  id1      4
    11     1     2  id2      4
    12     0     2  id2      4