Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用列表中的单词生成二进制矩阵?_Python_Pandas_Matrix - Fatal编程技术网

Python 如何使用列表中的单词生成二进制矩阵?

Python 如何使用列表中的单词生成二进制矩阵?,python,pandas,matrix,Python,Pandas,Matrix,我有一个dataframe,它的每一行都包含一个列表: df['list1'][0] = ['a','b','c','d'] df['list1'][1] = [,'b','c','d', 'e'] 现在我想从这个矩阵中生成一个二进制矩阵,字母作为列名,如果该行的列表中包含字母,则为1,如果不是0,则为0。我找不到解决这个问题的办法。有人能帮我吗?如果性能很重要,请使用: : 或使用DataFrameconstructor: df1 = (pd.get_dummies(pd.DataFram

我有一个dataframe,它的每一行都包含一个列表:

df['list1'][0] = ['a','b','c','d']

df['list1'][1] = [,'b','c','d', 'e']
现在我想从这个矩阵中生成一个二进制矩阵,字母作为列名,如果该行的列表中包含字母,则为1,如果不是0,则为0。我找不到解决这个问题的办法。有人能帮我吗?

如果性能很重要,请使用: :

或使用
DataFrame
constructor:

df1 = (pd.get_dummies(pd.DataFrame(df['list1'].values.tolist()), prefix_sep='', prefix='')
         .max(level=0, axis=1))
另一种解决方案,但如果使用大数据,则速度较慢:


编辑:如果需要删除
list1
列的原始列,请使用以下内容提取列:





谢谢不幸的是,现在我丢失了数据帧的其他数据:df['name']和df['title]。有没有办法让df['list1']成为一个二进制矩阵,df['name']和df['title]仍然在数据框中?@Jan-你能改变我的数据吗
df=pd.dataframe({'list1':['a','b','c','d'],['b','c','d','e']})
与其他具有预期输出的列一起?我的意思是,通过这种方式,我将丢失来自其他列的数据dataframe@Jan-给他们一点时间。@Jan-您需要删除原始的
list1
列吗?
df1 = (pd.get_dummies(pd.DataFrame(df['list1'].values.tolist()), prefix_sep='', prefix='')
         .max(level=0, axis=1))
df1 = df['list1'].str.join('|').str.get_dummies()
print (df1)
   a  b  c  d  e
0  1  1  1  1  0
1  0  1  1  1  1
df = pd.DataFrame({'list1':[ ['a','b','c','d'], ['b','c','d', 'e']],
                   'col1':[1,2],
                   'col2':list('XY')})
print (df)
          list1  col1 col2
0  [a, b, c, d]     1    X
1  [b, c, d, e]     2    Y

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df1 = pd.DataFrame(mlb.fit_transform(df.pop('list1')),columns=mlb.classes_, index=df.index)
print (df1)
   a  b  c  d  e
0  1  1  1  1  0
1  0  1  1  1  1
df1 = (pd.get_dummies(pd.DataFrame(df.pop('list1').values.tolist()), prefix_sep='', prefix='')
         .max(level=0, axis=1))
df1 = df.pop('list1').str.join('|').str.get_dummies()
df = df.join(df1)
print (df)
   col1 col2  a  b  c  d  e
0     1    X  1  1  1  1  0
1     2    Y  0  1  1  1  1