[英]Filling a dataframe from a dictionary keys and values: efficient way
我以下面的 dataframe 為例。
df_test = pd.DataFrame(data=0, index=["green","yellow","red"], columns=["bear","dog","cat"])
我有以下字典,其中的鍵和值與我的 dataframe 的索引和列相同或相關。
d = {"green":["bear","dog"], "yellow":["bear"], "red":["bear"]}
我根據提供的鍵和值填充了我的 dataframe,使用:
for k, v in d.items():
for x in v:
df_test.loc[k, x] = 1
我的問題是 dataframe 和我正在使用的字典非常大,計算時間太長。 有沒有更有效的方法來做到這一點? 也許迭代 dataframe 中的行而不是字典中的鍵和值?
因為性能很重要,所以使用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
使用get_dummies()
# convert dict to a Series
s = pd.Series(d)
# explode your list into columns and get dummies
df = pd.get_dummies(s.apply(pd.Series), prefix='', prefix_sep='')
bear dog
green 1 1
yellow 1 0
red 1 0
# convert dict to a Series
s = pd.Series(d)
# create a new data frame
df = pd.DataFrame(s.values.tolist(), index=s.index)
# get_dummies
new_df = pd.get_dummies(df, prefix='', prefix_sep='')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.