簡體   English   中英

我有一個數據集,我需要將一些列轉換為單個分類變量並連接多個真值

[英]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,它根據您要查找的邏輯使用ifelse語句。 您注意到必須至少有三個 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.

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