如何在 Pandas DataFrame 上编写条件数组操作

Posted

技术标签:

【中文标题】如何在 Pandas DataFrame 上编写条件数组操作【英文标题】:How to write a conditional array operation on a Pandas DataFrame 【发布时间】:2015-09-18 23:53:07 【问题描述】:

假设我有一个 DataFrame,其中一列(我们将其称为“power”)保存从 1 到 10000 的整数值。我想生成一个 numpy 数组,该数组对于每一行都有一个值表示DataFrame对应行的'power'列是否有大于9000的值。

我可以这样做:

def categorize(frame):
    return np.array(frame['power']>9000)

这会给我一个布尔数组,可以用 True 和 False 进行测试。但是,假设我希望数组的内容为 1 和 -1,而不是 True 和 False。如何在不必遍历框架中的每一行的情况下完成此操作?

作为背景,该应用程序正在使用 scikit-learn 通过机器学习为二进制分类准备数据。

【问题讨论】:

***.com/questions/19913659/… 【参考方案1】:

您可以将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 进一步了解此类内容。

【讨论】:

以上是关于如何在 Pandas DataFrame 上编写条件数组操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pandas 中遍历 DataFrame 中的行

如何在 Pandas 中遍历 DataFrame 中的行

Pandas:如何将 cProfile 输出存储在 pandas DataFrame 中?

如何在 jupyter 中像 pandas Dataframe 一样打印 Pyspark Dataframe

如何在 Pandas 中将 DataFrame 的行迭代为 Series?

如何在 pandas.DataFrame.plot() 中为标题设置字体大小?