【问题标题】:Pandas removing duplicate range of data熊猫删除重复的数据范围
【发布时间】:2017-08-01 16:05:11
【问题描述】:

大家好,我有以下数据框:

df1
      WL       WM      WH        WP      
1     low    medium   high   premium
2     26       26      15        14
3     32       32      18        29 
4     41       41      19        42
5     apple    dog     fur      napkins          
6     orange   cat     tesla    earphone
7     NaN      rat     tobias   controller
8     NaN      NaN     phone
9     low      medium  high            
10     1        3       5
11     2        4       6
12    low      medium  high
13     4        8       10
14     5        9       11

有没有办法去掉low + 2 行,使得输出是这样的:

df1
      WL       WM      WH        WP      
1     low    medium   high   premium
2     26       26      15        14
3     32       32      18        29 
4     41       41      19        42
5     apple    dog     fur      napkins          
6     orange   cat     tesla    earphone
7     NaN      rat     tobias   controller
8     NaN      NaN     phone

不幸的是,代码必须是动态的,因为我有多个数据框,并且每个数据框的“低”位置都不同。我最初的尝试:

df1 = df1[~df1.iloc[:,0].isin(['LOW'])+2].reset_index(drop=True)

然而,这并不是我想要的。任何帮助表示赞赏

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    你可以使用:

    #get index values where low
    a = df.index[df.iloc[:,0] == 'low']
    
    size = 2
    #all index values (without first [1:])
    #min is for last rows of df for avoid select non existed values
    arr = [np.arange(i, min(i+size+1,len(df)+1)) for i in a[1:]]
    idx = np.unique(np.concatenate(arr))
    print (idx)
    [ 9 10 11 12 13 14]
    
    #remove rows
    df = df.drop(idx)
    print (df)
           WL      WM      WH          WP
    1     low  medium    high     premium
    2      26      26      15          14
    3      32      32      18          29
    4      41      41      19          42
    5   apple     dog     fur     napkins
    6  orange     cat   tesla    earphone
    7     NaN     rat  tobias  controller
    8     NaN     NaN   phone         NaN
    

    【讨论】:

    • 它是窗口大小
    • 需要删除2行,所以size=2
    • 这真的很接近!但是,当我打印 idx 时,它似乎并没有捕捉到最后一个低 + 2 行的实例。知道如何解决吗?
    • 索引是否唯一? df = df.reset_index(drop=True) 可以帮忙。
    • 修复了它,谢谢!如果我想修改“a”以包含单词列表,我该怎么做? @jezrael
    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2020-03-23
    • 2016-01-30
    • 2018-02-24
    • 2019-05-08
    • 2017-11-30
    相关资源
    最近更新 更多