python - 是否有一个 Python 函数可以根据条件过滤并将二进制值分配给数据集中的列?

标签 python pandas dataframe filtering

<分区>

过滤我的结果数据框时出现问题。我的数据集中有一列名为 PaymentAmount其中有数字数据,想执行一个操作来赋值

  • 1 如果data['PaymentAmount'] > 25000
  • 0 如果data['PaymentAmount'] <= 25000

我尝试使用下面的

1 if data['PaymentAmount'] >= 25000 else 0

但出现以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-176-e368653724d0> in <module>
----> 1 1 if data['PaymentAmount'] >= 25000 else 0

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
   1574         raise ValueError("The truth value of a {0} is ambiguous. "
   1575                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1576                          .format(self.__class__.__name__))
   1577 
   1578     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

最佳答案

这里最好使用矢量化解决方案 - 将 bool 掩码转换为整数,用于 True/False1/0 映射:

data['new'] = (data['PaymentAmount'] > 25000).astype(int)

或者使用numpy.where :

data['new'] = np.where(data['PaymentAmount'] > 25000, 1, 0)

您的解决方案应该使用 lambda 函数和 apply,但它很慢,因为底层有循环:

data['new'] = data['PaymentAmount'].apply(lambda x: 1 if  x >= 25000 else 0)

关于python - 是否有一个 Python 函数可以根据条件过滤并将二进制值分配给数据集中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55449929/

相关文章:

Python:选择落在两条任意曲线内的点

Python Pandas self join 用于合并笛卡尔积以产生所有组合和总和

r - 如何从 R 中的 .csv 文件中读取列向量

python - 手动打开 excel 文件允许公式运行,使用 VBScript 或 PowerShell 或 Python 的 win32com 打开 excel 文件则不允许

python - Py2Exe 生成日志文件

python - 如何在更改时自动重新加载python文件

python - Pandas DataFrame 如何按指定列的值对行进行分组(透视?),但保留原始索引?

python - 对具有相同类别的多列进行标签编码

python - 在整个数据框中查找最大值和相应的列/索引名称

python - 如何将函数应用于两列 Pandas 数据框