[英]Filling values in rows of column in a data frame, if condition based on 2 other columns row values in the same data frame is met
[英]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'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.