如何在 pandas 中将一组特征转换为计数矩阵

How to convert a set of features to a count matrix in pandas

给定一个矩阵

----d1 d2 d3 a: v1 0 v2 b: v1 v3 0

我要

----v1 v2 v3 a: 1 1 0 b: 1 0 1

我依稀记得用Gensim就可以了...但是pandas里面肯定也有一些模块吧?我已经尝试做 for v in v: for el in [a,b](很高兴 post 的代码,但我认为这个例子已经足够清楚了)但是它很慢,我想这之前一定已经解决了。

您可以使用 pandas.get_dummies,例如

import pandas as pd

# create your dataframe
df = pd.DataFrame(index=['a', 'b'],
                  data={'d1': ['v1', 'v1'],
                        'd2': [None, 'v3'],
                        'd3': ['v2', None]})

# perform one-hot encoding
df = pd.get_dummies(df, prefix_sep='=')

# rename if you so wish
df.rename(columns={c: c.split('=')[1] for c in df.columns}, inplace=True)

# sort columns by name (not really necessary)
df.sort_index(axis=1, inplace=True)

# have a look
print df

产生

   v1  v2  v3
a   1   1   0
b   1   0   1

从您的 DataFrame DF 开始,将 0 替换为 NaN

DF=ps.DataFrame({'d1':['v1','v1'],'d2':[NaN,'v3'],'d3':['v2',NaN]},index=['a','b'])

获取您要计算的唯一值:

Vals=DF.stack().unique()

对计数使用一些列表理解:

ps.DataFrame([[(DF.ix[ind,:]==Vi).sum() for Vi in Vals] for ind in DF.index] , columns=Vals, index=DF.index)