如何基于多列过滤pandas数据集?

时间:2017-07-27 22:13:13

标签: python pandas lambda

我正在尝试一些ifthen逻辑,但我在数据框架中工作,无法找到任何示例。

我要做的是过滤此数据集以仅包含值 col1 = col3和col2 = col4

col1       col2     col3       col4
Wagner     John     Wagner     John
Jane       Mary     Klein      Peter 
Schneider  Megan    Wicker     Sam
Schneider  Megan    Schneider  Megan

结果

col1       col2     col3        col4
Wagner     John     Wagner      John
Schneider  Megan    Schneider   Megan

我的代码在这里不起作用

 df1.apply(lambda x : x['col1'] if x['col1'] == x['col1'] and x['col2'] == x['col2'] else "", axis=1

2 个答案:

答案 0 :(得分:4)

我使用DataFrame.query()方法:

In [205]: df.query("col1==col3 and col2==col4")
Out[205]:
        col1   col2       col3   col4
0     Wagner   John     Wagner   John
3  Schneider  Megan  Schneider  Megan

或“经典”方法:

In [206]: df.loc[(df.col1==df.col3) & (df.col2==df.col4)]
Out[206]:
        col1   col2       col3   col4
0     Wagner   John     Wagner   John
3  Schneider  Megan  Schneider  Megan

答案 1 :(得分:1)

弄乱numpy并假设列是他们的具体顺序

df[np.equal(*df.values.T.reshape(2, 2, -1)).all(0)]

        col1   col2       col3   col4
0     Wagner   John     Wagner   John
3  Schneider  Megan  Schneider  Megan

如果列是另一个订单

cols = ['col1', 'col2', 'col3', 'col4']
v = np.column_stack([df[c].values for c in cols])
df[np.equal(*v.T.reshape(2, 2, -1)).all(0)]