繁体   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