使用pandas dataframe slice中的all()函数进行过滤

时间:2017-08-02 18:50:25

标签: python pandas dataframe

如果我有数据框,例如

df = pd.DataFrame(
    {
        'one' : pd.Series(
            [1., 2., 3., 4.],
            index=['a', 'b', 'c', 'd']
        ),
        'two' : pd.Series(
            ['5,6', '7,8', '1,10', '3,8,9'], 
            index=['a', 'b', 'c', 'd']
        )
    }
)

example_dataframe

如何只选择第2列中不包含任何小于3的整数的行?我的意思是:

df[
    all([int(x) > 3 for x in df['two'].str.split(',')])
]

但它会抛出

KeyError: True
对我说。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

x是一个字符串列表,您需要添加一个内部循环来检查x并检查值:

df[
    [all(int(x) > 3 for x in s) for s in df['two'].str.split(',')]
]

#   one two
#a  1.0 5,6
#b  2.0 7,8

或者,您可以使用apply方法替换外部for循环:

df[
    df.two.str.split(',').apply(lambda s: all(int(x) > 3 for x in s))
]

#   one two
#a  1.0 5,6
#b  2.0 7,8