如何在熊猫df中选择特定行

时间:2018-07-20 06:42:25

标签: python pandas sorting

我正在尝试根据特定值对pandas df进行排序。因此,对于下面的pandas df,我想在A, C中选择值Column Event。我还想在U,Z

中选择值Column Code
import pandas as pd

d = ({
    'Event' : ['A','B','C','D','E','A','B','C','D'],
    'Code' : ['W','X','Y','U','Z','X','Y','W','Z'],
    'Int' : [1,2,3,4,5,6,7,8,9]
    })

df = pd.DataFrame(data = d)

我可以通过一栏来做到这一点:

df = df.loc[df['Event'].isin(['A','C'])]

但是,如果我尝试添加第二列

df = df.loc[df['Code'].isin(['U','Z'])]

它返回一个空的df。我想要的df是:

  Event Code  Int
0     A    W    1
1     C    Y    3
2     D    U    4
3     E    Z    5
4     A    X    6
5     C    W    8
6     D    Z    9

4 个答案:

答案 0 :(得分:2)

我认为您需要:

df = df.loc[df['Event'].isin(['A','C']) | df['Code'].isin(['U','Z'])].reset_index(drop=True)

输出:

  Code Event  Int
0    W     A    1
1    Y     C    3
2    U     D    4
3    Z     E    5
4    X     A    6
5    W     C    8
6    Z     D    9

答案 1 :(得分:1)

这里发生的事情是,您首先选择具有A,C的行,并且您尝试搜索具有U和Z的列。但是,如果您注意到,Event中所有具有A,C的行都没有值代码列中的U和Z这就是您获得空数据框的原因。

尝试以下方法:

 newdf = df.query("Event in ['A','C'] | Code in ['U','Z']")
 newdf



    Event Code  Int
0     A    W    1
2     C    Y    3
3     D    U    4
4     E    Z    5
5     A    X    6
7     C    W    8
8     D    Z    9

答案 2 :(得分:0)

一个可能的解决方案。

df[(df.Code.isin(['U','Z'])) | (df.Event.isin(['A', 'C']))]

答案 3 :(得分:0)

在这里,您可以同时调用来自不同列的两个值。

new_df=df[(df["event"] == 'A') & (df["code"] == "u") ]