根据其他两个数据框列中的值条件创建新列

Create new column based on condition of values in two other data frame columns

我是 python 的新手。我觉得有一个快速解决方案,但对我来说还没有什么是快速的。

我有一个超过 150,000 行的数据框,data。其中有两个系列:gridcodeCH4_Flux 等。我想创建一个名为 category 的新分类列,它根据此处显示的四个条件为每一行分配一个分类标识符:

cat1 = data[(data.gridcode <= threshAV) & (data.CH4_Flux >= threshAM)]
cat2 = data[(data.gridcode >= threshAV) & (data.CH4_Flux >= threshAM)]
cat3 = data[(data.gridcode <= threshAV) & (data.CH4_Flux <= threshAM)]
cat4 = data[(data.gridcode >= threshAV) & (data.CH4_Flux <= threshAM)]

其中 threshAVgridcode 的预先指定阈值,threshAMCH4_Flux 的预先指定阈值。本质上要么两者都超过阈值,既不超过,要么一个或另一个超过。分类标签最好是分别遵循上述 cat1cat2cat3cat4 逻辑的整数 1、2、3 和 4。

我已经尝试了 for 循环和 ifwhere 语句,但都被删除了。

在试验 for 循环时,我通常会遇到错误:

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

提前感谢您的任何建议或指导!

通过多个布尔掩码对新列使用 numpy.select

#removed filtering by data[]
m1 = (data.gridcode <= threshAV) & (data.CH4_Flux >= threshAM)
m2 = (data.gridcode >= threshAV) & (data.CH4_Flux >= threshAM)
m3 = (data.gridcode <= threshAV) & (data.CH4_Flux <= threshAM)
m4 = (data.gridcode >= threshAV) & (data.CH4_Flux <= threshAM)

data['category'] = np.select([m1, m2, m3, m4], [1,2,3,4])

或者:

data['category'] = np.select([m1, m2, m3, m4], ['cat1','cat2','cat3','cat4'])