如何在 Pandas DataFrame 上编写条件数组操作
How to write a conditional array operation on a Pandas DataFrame
假设我有一个 DataFrame,其中一列(我们称之为 'power')包含从 1 到 10000 的整数值。我想生成一个 numpy 数组,其中每个row,一个值,表示DataFrame对应行的'power'列是否有大于9000的值。
我可以这样做:
def categorize(frame):
return np.array(frame['power']>9000)
这将给我一个布尔数组,可以用 True 和 False 进行测试。但是,假设我希望数组的内容是 1 和 -1,而不是 True 和 False。如何在不必遍历框架中的每一行的情况下完成此操作?
作为背景,应用程序正在使用 scikit-learn 通过机器学习为二进制分类准备数据。
您可以对此类内容使用 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。
假设我有一个 DataFrame,其中一列(我们称之为 'power')包含从 1 到 10000 的整数值。我想生成一个 numpy 数组,其中每个row,一个值,表示DataFrame对应行的'power'列是否有大于9000的值。
我可以这样做:
def categorize(frame):
return np.array(frame['power']>9000)
这将给我一个布尔数组,可以用 True 和 False 进行测试。但是,假设我希望数组的内容是 1 和 -1,而不是 True 和 False。如何在不必遍历框架中的每一行的情况下完成此操作?
作为背景,应用程序正在使用 scikit-learn 通过机器学习为二进制分类准备数据。
您可以对此类内容使用 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。