python-2.7 - 创建布尔数据框,显示列表字典中每个元素的存在
问题描述
我有一个列表字典,我构建了一个数据框,其中索引是字典键,列是列表中包含的可能值集。数据框值表示字典中包含的每个列表的每一列的存在。构建它的最有效方法是什么?下面是我现在使用 for 循环完成它的方式,但我确信使用矢量化或连接有一种更有效的方式。
import pandas as pd
data = {0:[1,2,3,4],1:[2,3,4],2:[3,4,5,6]}
cols = sorted(list(set([x for y in data.values() for x in y])))
df = pd.DataFrame(0,index=data.keys(),columns=cols)
for row in df.iterrows():
for col in cols:
if col in data[row[0]]:
df.loc[row[0],col] = 1
else:
df.loc[row[0],col] = 0
print(df)
输出:
1 2 3 4 5 6
0 1 1 1 1 0 0
1 0 1 1 1 0 0
2 0 0 1 1 1 1
解决方案
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(data.values()),
columns=mlb.classes_,
index=data.keys())
print (df)
1 2 3 4 5 6
0 1 1 1 1 0 0
1 0 1 1 1 0 0
2 0 0 1 1 1 1
纯熊猫,但解决方案要慢得多str.get_dummies
:
df = pd.Series(data).astype(str).str.strip('[]').str.get_dummies(', ')
推荐阅读
- javascript - 使动画对声音文件做出反应的 Javascript 代码在 Edge 中有效,但在 Chrome 中无效
- html - 网站未加载 CSS,网页未加载图像
- java - 创建安装在当前模块内的另一个模块的 guice 注入器
- java - 将arff文件打开到weka时出错
- javascript - Javascript 手风琴
- node.js - 将 JSON 文件作为节点参数传递给 PM2
- scala - Scala过滤多个条件
- aws-lambda - 无服务器 wsgi 无法导入 werkzeug
- azure - Azure 应用服务计划选择多对一计划
- python - 模型预测的值与训练的值相似是否正常?