大熊猫:将所有具有2个值的列转换为True / False

时间:2018-08-07 10:13:18

标签: python pandas

我有一个熊猫数据框。某些列只有2个唯一值(例如GOOD / BAD,HIGH / LOW,FAIL / PASS)。它们的dtype为id = {id},因为数据帧是从CSV文件加载的。

我想将这些列转换为True / False,然后自动将列名更改为object

例如,

is_FIRST_VALUE

应转换为

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

3 个答案:

答案 0 :(得分:2)

您可以使用字典来指定您的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

答案 1 :(得分:2)

您可以尝试一下。遍历每一列。获取列的第一个唯一值。条件是该行是否包含此唯一值。我们想要条件的结果,只需将该值设置为列即可。

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

答案 2 :(得分:2)

您还可以使用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