从列表字典创建Pandas表,将每个项目作为索引

时间:2019-07-29 05:29:27

标签: python pandas

示例输入:

sample_dict = {"Pam":["cat", "dog", "bird"], 
               "Bron":["cat", "bird", "dragon"]
               }

所需的输出:

       Pam | Bron 
Cat    O     O
Dog    O     X
Bird   O     O
Dragon X     O

可以不必创建字典和数据透视表的两个版本来完成此操作吗?

1 个答案:

答案 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_dummiessplit并通过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
相关问题