示例输入:
sample_dict = {"Pam":["cat", "dog", "bird"],
"Bron":["cat", "bird", "dragon"]
}
所需的输出:
Pam | Bron
Cat O O
Dog O X
Bird O O
Dragon X O
可以不必创建字典和数据透视表的两个版本来完成此操作吗?
答案 0 :(得分:4)
使用MultiLabelBinarizer并转置:
sample_dict = {"Pam":["cat", "dog", "bird"],
"Bron":["cat", "bird", "dragon"]
}
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(list(sample_dict.values())),
columns=mlb.classes_,
index=list(sample_dict.keys())).T
print (df)
Pam Bron
bird 1 1
cat 1 1
dog 1 0
dragon 0 1
或仅使用get_dummies
,split
并通过DataFrame.stack
重塑的熊猫解决方案,最后使用DataFrame.max
:
df = pd.get_dummies(pd.DataFrame(sample_dict))
df.columns = df.columns.str.split('_', expand=True)
df = df.stack().fillna(0).astype(int).max(level=1)
print (df)
Bron Pam
bird 1 1
cat 1 1
dog 0 1
dragon 1 0
最后一次使用DataFrame.replace
:
df = df.replace({1:'O', 0:'X'})
print (df)
Pam Bron
bird O O
cat O O
dog O X
dragon X O