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

2024-06-28 18:59:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不熟悉。我有一种感觉,有一个快速解决,但没有什么似乎很快对我来说

我有一个150000多行的数据帧,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().

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


Tags: 数据fordata分类阈值感觉cat1flux
1条回答
网友
1楼 · 发布于 2024-06-28 18:59:41

通过多个布尔掩码对新列使用^{}

#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'])

相关问题 更多 >