根据其他两个数据框列中的值条件创建新列
Create new column based on condition of values in two other data frame columns
我是 python 的新手。我觉得有一个快速解决方案,但对我来说还没有什么是快速的。
我有一个超过 150,000 行的数据框,data
。其中有两个系列:gridcode
和 CH4_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)]
其中 threshAV
是 gridcode
的预先指定阈值,threshAM
是 CH4_Flux
的预先指定阈值。本质上要么两者都超过阈值,既不超过,要么一个或另一个超过。分类标签最好是分别遵循上述 cat1
、cat2
、cat3
和 cat4
逻辑的整数 1、2、3 和 4。
我已经尝试了 for
循环和 if
和 where
语句,但都被删除了。
在试验 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'])
我是 python 的新手。我觉得有一个快速解决方案,但对我来说还没有什么是快速的。
我有一个超过 150,000 行的数据框,data
。其中有两个系列:gridcode
和 CH4_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)]
其中 threshAV
是 gridcode
的预先指定阈值,threshAM
是 CH4_Flux
的预先指定阈值。本质上要么两者都超过阈值,既不超过,要么一个或另一个超过。分类标签最好是分别遵循上述 cat1
、cat2
、cat3
和 cat4
逻辑的整数 1、2、3 和 4。
我已经尝试了 for
循环和 if
和 where
语句,但都被删除了。
在试验 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'])