我正在尝试根据特定值对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
答案 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") ]