使用pandas数据帧指定条件表达式

时间:2017-08-24 22:06:38

标签: python pandas dataframe conditional

我想知道如何根据多重检查条件在数据框中创建一个列。

当我使用单个条件检查时,这似乎工作正常。

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学期开始日期| 2017年1月1日
空白|空白
2016年6月12日真
5/1/2016 |真
2/1/2017 |假
4/1/2017 |错误

1 个答案:

答案 0 :(得分: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对数据帧不起作用,但按位运算符&|~都过载以用于条件数据。