我有一个熊猫数据框。某些列只有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
答案 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