2017-04-01 115 views
1

我想根据if语句创建一个新的列,该if语句在数据框中具有两个或更多其他列的条件。根据其他列的条件制作熊猫的新列

例如,column3 = True if(column1 < 10.0)and(column2> 0.0)。

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

我想我可以做两个额外的列,如果条件满足每列,然后总结列检查是否满足所有条件,但这似乎有点不雅。

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

非常感谢!

回答

1

你可以在这里使用简称:

# 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)写它没有EVAL。

您也可增强与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 
+0

谢谢你,我用numpy的“地方”的方法。尽管它似乎不喜欢“和”关键字,但它只适用于“&”和“|”。 有没有办法使用熊猫分配值而不是numpy?我看到它返回一个bools列表。你将不得不用它作为面具或什么?寻找类似的东西,“如果col1和col2符合某些条件,col3 = col1/col2,否则无” – nickm

+0

@nickm是的,您可以使用布尔序列作为您需要的任何值的掩码。还有一个pandas [where](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html),略有不同。 – pansen

相关问题