如何在 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)
给定一个矩阵
----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)