结果的矩阵形式表示

时间:2016-10-12 09:05:55

标签: python csv pandas

我有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文件都有效,我得到了上述结果。

我不确定如何处理这个问题。

1 个答案:

答案 0 :(得分:4)

您可以使用concat将所有DataFramesstackstr.get_dummies联系起来。索引(level=0)最后需要groupby,汇总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_dummiesgroupby按列(level=0,轴= 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