[英]I have a dataset where I need to convert some columns into single categorical variables & concatenating multi true values
我有一個具有唯一 ID 的數據集,其中的列每個 ID 都有幾個 bool 值。 因此,我需要將這些列轉換為連接多個真實布爾值的單個分類變量。 如果在提到的 bool ID 中有 3 個真值,我們將其分配給類別為“Win”
ID | BoolCol_1 | BoolCol_2 | BoolCol_3 | BoolCol_4 | 其他列 1 | 其他列 2 |
---|---|---|---|---|---|---|
1個 | 1個 | 2個 | 2個 | 1個 | X | 是 |
2個 | 2個 | 1個 | 1個 | 1個 | 一種 | b |
1 -> 真 2 -> 假
ID 是唯一的。
我無法在腦海中思考如何解決這個難題
歡迎來到 SO,rgl!
因此,在我們這里的例子中,“真”的數值 Boolean 值為 1,“假”的數值為 2。使用 Boolean 值進行運算的技巧是使用加法和減法。
第一步是將每行中包含的所有 Boolean 值和新列下的 append 這些值相加:
# Sum of Booleans in the row
df['sum_of_wins_and_losses'] = df.BoolCol_1 + df.BoolCol_2 + df.BoolCol_3 + df.BoolCol_4
下一步是編寫一個簡單的 function,它根據您要查找的邏輯使用if
和else
語句。 您注意到必須至少有三個 True 值才能使每個 ID 被視為“獲勝”。 這是您需要小心的地方。
這里,如果所有四行都為“真”,則最小總和為 4,而如果所有四行都為“假”,則最大總和為 8。 要被視為“獲勝”,每個 ID 的最大總和不得超過 5。 值為 5 基本上意味着三勝一負 (1+1+1+2=5)。
# Write function that contains the logic
def assign_win_or_loss(row):
if row <= 5:
result = 'win'
else:
result = 'loss'
return result
現在我們已經定義了 function,是時候apply
它應用到 dataframe 並創建一個包含分類變量的新列:
# Apply function and create a new column based on values in other column
df['win_or_loss'] = df['sum_of_wins_and_losses'].apply(assign_win_or_loss)
使用以下方法:
bool_cols = ['BoolCol_1', 'BoolCol_2', 'BoolCol_3', 'BoolCol_4']
cnts = df[bool_cols].stack().groupby(level=0).value_counts().unstack()[1]
df['cat_col'] = pd.Series(np.where(cnts >= 3, 'W', 'L'), dtype='category')
現在cat_col
是具有固定值W
(贏)、 L
(輸)的分類列
In [229]: df
Out[229]:
ID BoolCol_1 BoolCol_2 BoolCol_3 BoolCol_4 Other Col 1 Other Col 2 cat_col
0 1 1 2 2 1 x Y L
1 2 2 1 1 1 A b W
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.