我有7个带有单词列表的csv文件。我已将7个csv中的所有单词都放入一个名为Total_Words_list的新文件中。
问题是我需要以下矩阵的输出:
APPLE BALL CAT DOG....
A 0 1 1 0
B 1 1 0 1
C 1 1 1 0
在这里,主列表中的单词构成行,而7个文件名构成列。如果文件A中存在一个单词,则它变为1,否则变为0,依此类推。一次运行所有7个csv文件的操作,我得到了上述结果。
我不确定如何解决这个问题。
您可以使用concat
来全部隐藏DataFrames
,然后stack
使用str.get_dummies
。最后需要groupby
按索引(level=0
)进行汇总sum
:
import pandas as pd
import numpy as np
import io
temp=u"""CAT;BALL
"""
#after testing replace io.StringIO(temp) to filename
df1 = pd.read_csv(io.StringIO(temp), sep=";", index_col=None, header=None)
print (df1)
temp=u"""DOG;BALL;APPLE
"""
#after testing replace io.StringIO(temp) to filename
df2 = pd.read_csv(io.StringIO(temp), sep=";", index_col=None, header=None)
print (df2)
temp=u"""DOG;BALL;APPLE;CAT
"""
#after testing replace io.StringIO(temp) to filename
df3 = pd.read_csv(io.StringIO(temp), sep=";", index_col=None, header=None)
print (df3)
df = pd.concat([df1,df2,df3], keys=['A','B','C'])
df.reset_index(1, drop=True, inplace=True)
print (df)
0 1 2 3
A CAT BALL NaN NaN
B DOG BALL APPLE NaN
C DOG BALL APPLE CAT
print (df.stack().reset_index(1, drop=True).str.get_dummies())
APPLE BALL CAT DOG
A 0 0 1 0
A 0 1 0 0
B 0 0 0 1
B 0 1 0 0
B 1 0 0 0
C 0 0 0 1
C 0 1 0 0
C 1 0 0 0
C 0 0 1 0
print (df.stack().reset_index(1, drop=True).str.get_dummies().groupby(level=0).sum())
APPLE BALL CAT DOG
A 0 1 1 0
B 1 1 0 1
C 1 1 1 1
带有pandas.get_dummies
和groupby
按列(level=0
,axis = 1)的另一种解决方案sum
:
print (pd.get_dummies(df, dummy_na=False, prefix='', prefix_sep='')
.groupby(level=0, axis=1).sum())
APPLE BALL CAT DOG
A 0 1 1 0
B 1 1 0 1
C 1 1 1 1
通过评论编辑:
另一种方法是dummies
分别从每个数据帧获取然后concat
输出:
df11 = pd.get_dummies(df1, dummy_na=False, prefix='', prefix_sep='')
.groupby(level=0, axis=1).sum()
#print (df11)
df21 = pd.get_dummies(df2, dummy_na=False, prefix='', prefix_sep='')
.groupby(level=0, axis=1).sum()
#print (df21)
df31 = pd.get_dummies(df3, dummy_na=False, prefix='', prefix_sep='')
.groupby(level=0, axis=1).sum()
#print (df31)
df = pd.concat([df11,df21,df31], keys=['A','B','C']).fillna(0).astype(int)
df.reset_index(1, drop=True, inplace=True)
print (df)
APPLE BALL CAT DOG
A 0 1 1 0
B 1 1 0 1
C 1 1 1 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句