首页 > 解决方案 > Python & Pandas:结构化条件

问题描述

可能是一个菜鸟问题,但我是 Python 和 Pandas 的新手,还在学习语法。我正在开发一个脚本,我想在其中构建一个将单元格值乘以整个列的条件。

这是 的结构test.csv

在此处输入图像描述

如果单元格中的值大于 3,我想创建一个将单元格error_count_score中的值乘以3 的列error_count(作为 Excel 公式,它将是:)=IF(C2<=3,0,(C2*3))。在这种情况下,新列的值是012

我怀疑有多种方法可以解决这个问题,但我不确定如何构造代码。这是我的工作代码尝试:

import pandas as pd

df = pd.read_csv("test.csv")
    
df.loc[df['error_count'] >= 3, 'error_count_score'] = #do I put an object here? * 3

非常感谢任何帮助或建议。

标签: pythonpandas

解决方案


您可以创建一个函数,对 column 中的单个元素执行您想要的操作,然后将该函数应用于该列的每个元素,生成您的新列。

这是通过DataFrame.apply方法完成的。

在你的情况下:

def my_function(element):
    if element <= 3:
        return 0
    else: 
        return element * 3

df['error_count_score'] = df['error_count'].apply(my_function)

请注意,pandas 期望my_function接受一个参数(列的每个元素),然后通过一些逻辑应用它,最后返回一个新元素。这正是这里发生的事情。

当你习惯了 pandas 时,你会发现很多时候人们不会费心去定义一个函数,只是为了应用它一次。在这些情况下,人们会使用一个匿名函数——基本上是一个只存在于一行的函数——使用lambda关键字。

在你的情况下:

df['error_count_score'] = df['error_count'].apply(lambda element: 0 if element <= 3 else element * 3)

推荐阅读