Python 如何使用列表中的单词生成二进制矩阵?
我有一个dataframe,它的每一行都包含一个列表: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
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