我想基于if语句创建一个新列,该语句具有数据帧中两个或更多其他列的条件。
例如,如果(column1< 10.0)和(column2> 0.0),column3 = True。
我环顾四周,似乎其他人已经使用了带有lambda函数的apply方法,但我对这些有点新手。
我想我可以制作两个额外的列,如果满足每个列的条件,则使该行为1,然后对列进行求和以检查是否满足所有条件,但这似乎有点不优雅。
如果您使用apply / lambda提供答案,请假设数据框名为sample_df,列为col1,col2和col3。
非常感谢!
答案 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