python - 将值是不同长度列表的字典转换为数据框

标签 python pandas dataframe dictionary matrix

我有一本字典,其中的键是年份,而值是对应的模型。下面是我从字典中打印出来的一段数据。

1975: ['MODEL9808533471'], 
1985: ['MODEL0912768548'], 
1980: ['MODEL1006230072', 'MODEL7898438988'], 
1987: ['MODEL0848444339'], 
1977: ['MODEL7889395724'], 
1962: ['MODEL8686121468'], 
1965: ['MODEL0911532520'],  
2018: ['MODEL1712050002', 'MODEL1712050003', 'MODEL1712050004']

我想要的如下:

                 1962    1965    1975   1977   1980   1985  1987  2018
MODEL9808533471                    1
MODEL0912768548                                         1
MODEL1006230072                                  1
MODEL7898438988                                  1
MODEL0848444339                                               1
MODEL7889395724                           1
MODEL8686121468   1
MODEL0911532520            1
MODEL1712050002                                                     1
MODEL1712050003                                                     1
MODEL1712050004                                                     1

一开始,我认为我们需要循环字典的每个值并构建矩阵。然后 pandas 将输出到 csv 文件。
我在 numpy 包中找不到类似的想法,尽管它在处理矩阵方面很强大。我找到了 this link在我们的论坛中,但列表的长度是相同的。

你知道有什么工具或设施(例如 pandas 中的功能、numpy 或类似的东西)可以帮助我这样做吗?

谢谢!

最佳答案

完美契合sklearnMultiLabelBinarizer的使用

from sklearn.preprocessing import MultiLabelBinarizer
s = pd.Series(d)
mlb = MultiLabelBinarizer()
yourdf=pd.DataFrame(mlb.fit_transform(s),columns=mlb.classes_, index=s.index).T
yourdf
Out[121]: 
                 1975  1985  1980  1987  1977  1962  1965  2018
MODEL0848444339     0     0     0     1     0     0     0     0
MODEL0911532520     0     0     0     0     0     0     1     0
MODEL0912768548     0     1     0     0     0     0     0     0
MODEL1006230072     0     0     1     0     0     0     0     0
MODEL1712050002     0     0     0     0     0     0     0     1
MODEL1712050003     0     0     0     0     0     0     0     1
MODEL1712050004     0     0     0     0     0     0     0     1
MODEL7889395724     0     0     0     0     1     0     0     0
MODEL7898438988     0     0     1     0     0     0     0     0
MODEL8686121468     0     0     0     0     0     1     0     0
MODEL9808533471     1     0     0     0     0     0     0     0

或者get_dummies

s.apply(','.join).str.get_dummies(',').T
Out[127]: 
                 1975  1985  1980  1987  1977  1962  1965  2018
MODEL0848444339     0     0     0     1     0     0     0     0
MODEL0911532520     0     0     0     0     0     0     1     0
MODEL0912768548     0     1     0     0     0     0     0     0
MODEL1006230072     0     0     1     0     0     0     0     0
MODEL1712050002     0     0     0     0     0     0     0     1
MODEL1712050003     0     0     0     0     0     0     0     1
MODEL1712050004     0     0     0     0     0     0     0     1
MODEL7889395724     0     0     0     0     1     0     0     0
MODEL7898438988     0     0     1     0     0     0     0     0
MODEL8686121468     0     0     0     0     0     1     0     0
MODEL9808533471     1     0     0     0     0     0     0     0

关于python - 将值是不同长度列表的字典转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55286915/

相关文章:

python - Python 中的函数和可变列表

r - 数据框中的条件出现计算

python - 如何检查组级别的重复?

python - Pandas DataFrames 充当另一个 DataFrame 的事件 View

pandas - Pandas Dataframe 的 Sublime Text 打印输出

Python:尾随的分隔符或斜杠符号表示什么?

python - 如何使用SIFT从数据集中提取相同大小的特征向量?

python - Python opencv过滤感兴趣区域之外的所有内容

Python:将文本字符串从DataFrame提取为长字符串

python - python中的替换函数给出错误的结果