根据其他列的条件在pandas中创建一个新列

时间:2017-04-01 18:26:31

标签: python pandas dataframe lambda apply

我想基于if语句创建一个新列,该语句具有数据帧中两个或更多其他列的条件。

例如,如果(column1< 10.0)和(column2> 0.0),column3 = True。

我环顾四周,似乎其他人已经使用了带有lambda函数的apply方法,但我对这些有点新手。

我想我可以制作两个额外的列,如果满足每个列的条件,则使该行为1,然后对列进行求和以检查是否满足所有条件,但这似乎有点不优雅。

如果您使用apply / lambda提供答案,请假设数据框名为sample_df,列为col1,col2和col3。

非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以在此处使用eval

# create some dummy data
df = pd.DataFrame(np.random.randint(0, 10, size=(5, 2)), 
                  columns=["col1", "col2"])
print(df)

    col1    col2
0   1       7
1   2       3
2   4       6
3   2       5
4   5       4

df["col3"] = df.eval("col1 < 5 and col2 > 5")
print(df)

    col1    col2    col3
0   1       7       True
1   2       3       False
2   4       6       True
3   2       5       False
4   5       4       False

您也可以通过(df["col1"] < 5) & (df["col2"] > 5)在没有评估的情况下编写它。

您还可以使用np.where增强示例,以便立即明确设置正面否定案例的值:

df["col4"] = np.where(df.eval("col1 < 5 and col2 > 5"), "Positive Value", "Negative Value")
print(df)

    col1    col2    col3    col4
0   1       7       True    Positive Value
1   2       3       False   Negative Value
2   4       6       True    Positive Value
3   2       5       False   Negative Value
4   5       4       False   Negative Value