2017-08-24 25 views
0

我想知道如何根据多重检查条件在我的数据框中创建一列。用熊猫数据框指定条件表达式

当我使用单一的条件检查这似乎工作正常。

df['1/1/2017'] = np.where(df["Term 1 Start Date"] <= '1/1/2017'), 'True', 'False') 

然而,当我介绍了第二个选项,以检查在失败告诉我,ValueError: The truth value of a Series is ambiguous.

df['1/1/2017'] = np.where(
    (df["Term 1 Start Date"] <= '1/1/2017' and df["Term 1 End Date"] > '1/1/2017'), 'True', 'False') 

应当注意的是,并不是所有的线路都填写该日期包含日期,你会期望。 我能做些什么来根据两个标准填充这个新列?

当前数据帧

期望的结果

学期开始日期| 1/1/2017
blank |空白
6/12/2016 |真
5/1/2016 |真
2/1/2017 |假
4/1/2017 |假

+0

检查链接https://stackoverflow.com/questions/21415661/logic-operator-for-boolean-indexing-in-pandas – Wen

回答

3

您需要按位运算符&而不是and。你还需要额外的括号来处理优先级。

df['1/1/2017'] = np.where(((df["Term 1 Start Date"] <= '1/1/2017')\ 
          & (df["Term 1 End Date"] > '1/1/2017'),\ 
        'True', 'False')) 

原因是,and没有发挥好与dataframes,但位运算符&|~都是重载条件语句中使用。