簡體   English   中英

大熊貓:將所有具有2個值的列轉換為True / False

[英]pandas: converting all columns with 2 values to True/False

我有一個熊貓數據框。 某些列只有2個唯一值(例如GOOD / BAD,HIGH / LOW,FAIL / PASS)。 它們的dtype是object因為數據幀是從CSV文件加載的。

我想將這些列轉換為True / False,然后自動將列名稱更改為is_FIRST_VALUE

例如,

  X1   X2   X3  
  HIGH FAIL GOOD
  HIGH PASS GOOD
  LOW  FAIL BAD

應轉換為:

X1_is_HIGH  X2_is_FAIL  X3_is_GOOD
True        True        True
True        False       True
False       True        False

您可以使用詞典來指定True條件。 然后迭代您的列以更新它們。 最后,使用pd.DataFrame.rename通過自定義函數重命名列。

d = {'X1': 'HIGH', 'X2': 'FAIL', 'X3': 'GOOD'}

for col in df:
    df[col] = df[col] == d[col]

df = df.rename(columns=lambda x: x+'_'+d[x])

print(df)

  X1_HIGH X2_FAIL X3_GOOD
0    True    True    True
1    True   False    True
2   False    True   False

你可以試試看。 遍歷每一列。 獲取列的第一個唯一值。 條件是該行是否包含此唯一值。 因為我們想要條件的結果,只需將該值設置為列即可。

df = pd.DataFrame({
                'X1' : ['HIGH', 'LOW', 'HIGH', 'HIGH'], 
                'X2' : ['FAIL', 'PASS','FAIL', 'PASS'],
                'X3' : ['GOOD','GOOD', 'BAD', 'BAD']
            })

for column in df.columns:
    uni = df[column].unique()[0]
    mask = df[column] == uni
    df[column] = mask
    df.rename(columns = {column:column+'_'+uni}, inplace=True)

    X1_HIGH         X2_FAIL         X3_GOOD
0   True            True            True
1   False           False           True
2   True            True            False
3   True            False           False

您還可以使用pandas.get_dummies()來轉換分類:

import pandas as pd
df = pd.DataFrame({'X1': ['HIGH','HIGH','LOW'], 'X2': ['FAIL','PASS','FAIL'], 'X3': ['GOOD','GOOD','BAD']})
df2 = pd.get_dummies(df, drop_first=True)
print(df2.astype(bool))

# returns:
#   X1_LOW  X2_PASS  X3_GOOD
# 0   False    False     True
# 1   False     True     True
# 2    True    False    False

編輯:完全獲取您要求的輸出:

df2 = pd.get_dummies(df)
print(df2.loc[:,df2.iloc[0] == 1].astype(bool))

# returns
#   X1_HIGH  X2_FAIL  X3_GOOD
# 0     True     True     True
# 1     True    False     True
# 2    False     True    False

暫無
暫無

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

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