假设我有一个DataFrame,其中一列(我们称之为' power')保存从1到10000的整数值。我想生成一个numpy数组,其中包含,对于每一行,一个值指示DataFrame的相应行是否具有“电源”中的值。列大于9000.
我可以这样做:
def categorize(frame):
return np.array(frame['power']>9000)
这将给我一个布尔数组,可以使用True和False进行测试。但是,假设我希望数组的内容为1和-1,而不是True和False。如何在不必遍历框架中的每一行的情况下完成此操作?
对于后台,该应用程序正在通过使用scikit-learn的机器学习准备二进制分类数据。
答案 0 :(得分:2)
您可以将np.where
用于此类内容。
请考虑以下事项:
import pandas as pd
df = pd.DataFrame({
'a': range(20)})
df['even'] = df.a % 2 == 0
所以现在even
是一个布尔列。要按照您喜欢的方式创建数组,可以使用
np.where(df.even, 1, -1)
如果您愿意,可以将其分配回DataFrame:
df['foo'] = np.where(df.even, 1, -1)
进一步查看pandas
cookbook这类内容。