簡體   English   中英

從字典鍵和值中填充 dataframe:有效方式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM