如何在 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