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