Pandas 熊猫:与get_假人的共现矩阵
我试图重塑一个数据帧,以创建一种发生矩阵,但没有成功Pandas 熊猫:与get_假人的共现矩阵,pandas,Pandas,我试图重塑一个数据帧,以创建一种发生矩阵,但没有成功 pandas.get_dummies()这样做正确吗 这是我到目前为止试过的 import pandas as pd xlst_entries = [[u'aus', u'fra', u'gbr'],[u'gbr', u'prt'],[u'chn'],[u'bel', u'gbr'],[u'gbr', u'prt'],[u'gbr', u'prt'],[u'gbr', u'prt']] qq1 = pd.DataFrame(xlst_e
pandas.get_dummies()
这样做正确吗
这是我到目前为止试过的
import pandas as pd
xlst_entries = [[u'aus', u'fra', u'gbr'],[u'gbr', u'prt'],[u'chn'],[u'bel', u'gbr'],[u'gbr', u'prt'],[u'gbr', u'prt'],[u'gbr', u'prt']]
qq1 = pd.DataFrame(xlst_entries)
qq2 = pd.get_dummies(data= qq1, prefix=None)
qq2
但我想要的结果是
index fra bel chn prt aus gbr
0 1 0 0 0 1 1
1 0 0 0 1 0 1
2 0 0 1 0 0 0
3 0 1 0 0 0 1
4 0 0 0 1 0 1
5 0 0 0 1 0 1
6 0 0 0 1 0 1
您可以对
xlst_条目进行一些预处理
,将所有条目合并为一个由|
分隔的字符串,然后使用:
结果输出:
aus bel chn fra gbr prt
0 1 0 0 1 1 0
1 0 0 0 0 1 1
2 0 0 1 0 0 0
3 0 1 0 0 1 0
4 0 0 0 0 1 1
5 0 0 0 0 1 1
6 0 0 0 0 1 1
您可以调整其中的参数,以便删除所形成列的
前缀
,并对具有相同名称的列求和,以获得所需的帧
df = pd.get_dummies(df, prefix='', prefix_sep='')
df.groupby(df.columns, axis=1).agg(np.sum).astype(int)
aus bel chn fra gbr prt
0 1 0 0 1 1 0
1 0 0 0 0 1 1
2 0 0 1 0 0 0
3 0 1 0 0 1 0
4 0 0 0 0 1 1
5 0 0 0 0 1 1
6 0 0 0 0 1 1
这是一个有点通用的辅助函数,几乎可以用于任何data.frame(用python2编写,对于python3测试,请确保用
列表
包装映射
和减少
函数):
df = pd.get_dummies(df, prefix='', prefix_sep='')
df.groupby(df.columns, axis=1).agg(np.sum).astype(int)
aus bel chn fra gbr prt
0 1 0 0 1 1 0
1 0 0 0 0 1 1
2 0 0 1 0 0 0
3 0 1 0 0 1 0
4 0 0 0 0 1 1
5 0 0 0 0 1 1
6 0 0 0 0 1 1
def get_multiple_dummies(dframe):
from functools import reduce
combined = [pd.get_dummies(dframe.iloc[:, i]) for i in range(len(dframe.columns))]
allcolumns = set(reduce(list.__add__, map(lambda y: y.columns.tolist(),
combined)))
combined = map(lambda x: pd.concat([x, pd.DataFrame(
columns = filter(lambda y: y not in x.columns,
allcolumns))]), combined)
return reduce(lambda x,y: x.fillna(0)+y.fillna(0), combined)
print get_multiple_dummies(qq1)
aus bel chn fra gbr prt
0 1 0 0 1 1 0
1 0 0 0 0 1 1
2 0 0 1 0 0 0
3 0 1 0 0 1 0
4 0 0 0 0 1 1
5 0 0 0 0 1 1
6 0 0 0 0 1 1
[7 rows x 6 columns]