我以以下数据框为例。
df_test = pd.DataFrame(data=0, index=["green","yellow","red"], columns=["bear","dog","cat"])
我有以下字典,其中的键和值与数据框的索引和列相同或相关。
d = {"green":["bear","dog"], "yellow":["bear"], "red":["bear"]}
我使用显示的键和值填充了数据框,方法是:
for k, v in d.items():
for x in v:
df_test.loc[k, x] = 1
我的问题是我正在使用的数据框和字典非常大,并且计算花费了太多时间。有更有效的方法吗?也许迭代数据框中的行,而不是字典中的键和值?
由于性能很重要,因此MultiLabelBinarizer
:
d = {"green":["bear","dog"], "yellow":["bear"], "red":["bear"]}
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(list(d.values())),
columns=mlb.classes_,
index=list(d.keys()))
print (df)
bear dog
green 1 1
yellow 1 0
red 1 0
然后通过添加缺少的列和索引标签DataFrame.reindex
:
df_test = df.reindex(columns=df_test.columns, index=df_test.index, fill_value=0)
print (df_test)
bear dog cat
green 1 1 0
yellow 1 0 0
red 1 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句