簡體   English   中英

根據其他兩個數據框列中的值條件創建新列

[英]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)]

其中threshAV為預先指定的閾值gridcode ,和threshAM為預先指定的閾值CH4_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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM