假设我有下表: 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 这是怎么回事以及如何解决?
答案 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')