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