pandas:使用运算符链接过滤DataFrame的行

发布于 2021-02-02 23:12:23

在大部分操作pandas可以与运营商链接(来完成groupby,aggregate,apply,等),但我发现过滤行唯一方法是通过正常的托架索引

df_filtered = df[df['column'] == value]

这没有吸引力,因为它要求我先分配df一个变量,然后才能根据其值进行过滤。还有以下内容吗?

df_filtered = df.mask(lambda x: x['column'] == value)
关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    我不确定你想要什么,最后一行代码也无济于事,但是无论如何:

    “链式”过滤是通过“链接”布尔索引中的条件来完成的。

    In [96]: df
    Out[96]:
       A  B  C  D
    a  1  4  9  1
    b  4  5  0  2
    c  5  5  1  0
    d  1  3  9  6
    
    In [99]: df[(df.A == 1) & (df.D == 6)]
    Out[99]:
       A  B  C  D
    d  1  3  9  6
    

    如果要链接方法,可以添加自己的mask方法并使用该方法。

    In [90]: def mask(df, key, value):
       ....:     return df[df[key] == value]
       ....:
    
    In [92]: pandas.DataFrame.mask = mask
    
    In [93]: df = pandas.DataFrame(np.random.randint(0, 10, (4,4)), index=list('abcd'), columns=list('ABCD'))
    
    In [95]: df.ix['d','A'] = df.ix['a', 'A']
    
    In [96]: df
    Out[96]:
       A  B  C  D
    a  1  4  9  1
    b  4  5  0  2
    c  5  5  1  0
    d  1  3  9  6
    
    In [97]: df.mask('A', 1)
    Out[97]:
       A  B  C  D
    a  1  4  9  1
    d  1  3  9  6
    
    In [98]: df.mask('A', 1).mask('D', 6)
    Out[98]:
       A  B  C  D
    d  1  3  9  6
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看