在熊猫数据框中使用查询

时间:2020-07-21 03:25:56

标签: python pandas dataframe data-analysis

假设我有下表: Original dataframe

我添加了一个称为“状态”的列,该列是对(性别,senior_management),基本上是以下对:[(Female,True),(Male,True),(Male,False),...]等等。 假设我正在寻找某些条件,所以我定义了列表:

conditions = [(Female, True), (Male, False)]

我现在的目标是使用查询创建一个仅具有条件值的新数据框。我目前有(请注意MyDataframe是旧的,我正在尝试将其保存为新的同时保留旧的):

NewDataFrame = MyDataFrame.query('status in @conditions')
NewDataframe.head()

这只会导致数据框的列名: Flawed_result 这是怎么回事以及如何解决?

1 个答案:

答案 0 :(得分:0)

似乎status列的类型为字符串,因为当您使用格式时,会将表达式转换为字符串,因此它永远不会与conditions元组列表匹配,因此您可以尝试将conditions列表定义为字符串:

import pandas as pd

df=pd.DataFrame({'gender':['Male','Female','Male','Female'],'Senior':[True,True,False,False]})
df['status']=df.apply(lambda row: "({},{})".format(row['gender'],row['Senior']), axis=1)
df
#   gender  Senior          status
#0    Male    True     (Male,True)
#1  Female    True   (Female,True)
#2    Male   False    (Male,False)
#3  Female   False  (Female,False)
conditions = ['(Female,True)', '(Male,False)']

df.query('status in @conditions')

输出:

   gender  Senior         status
1  Female    True  (Female,True)
2    Male   False   (Male,False)

如果要使用元组而不是字符串,可以尝试this来获取元组,然后进行查询

df=pd.DataFrame({'gender':['Male','Female','Male','Female'],'Senior':[True,True,False,False]}) 

df['status']=list(zip(df.gender, df.Senior))

conditions = [('Female',True), ('Male',False)]
df.query('status in @conditions')