这是我的示例df
doc_num
doc1 doc2
A B U123
A C U123
A D U124
B C U126
B D U126
我已经使用
pd.get_dummies(df.doc_num).sort_index(level=0)
制作这样的向量矩阵
U123 U124 U126
doc1 doc2
A B 1 0 0
A C 1 0 0
A D 0 1 0
B C 0 0 1
B D 0 0 1
但是我想连接doc1和doc2,然后创建一个新列以查看预期的结果
U123 U124 U126
doc_3
A,B 1 0 0
A,C 1 0 0
A,D 0 1 0
B,C 0 0 1
B,D 0 0 1
有可能吗?预先谢谢
答案 0 :(得分:1)
除了@jezrael的答案之外,您还需要向量矩阵,所以:
df1=pd.get_dummies(df.doc_num)
df1.insert(0, 'doc_3', df['doc1'] + ',' + df['doc2'])
print(df1.set_index('doc_3'))
或者:
df1=pd.get_dummies(df.doc_num)
df1['doc_3']=df.pop('doc1') + ',' + df.pop('doc2')
print(df1.set_index('doc_3'))
所有输出:
U123 U124 U126
doc_3
A,B 1 0 0
A,C 1 0 0
A,D 0 1 0
B,C 0 0 1
B,D 0 0 1
现在您确实获得了所需的输出。
答案 1 :(得分:0)
我认为您需要同时加入MultiIndex
的两个级别,并通过rename_axis
设置索引名称:
df1 = pd.get_dummies(df.doc_num).sort_index(level=0)
df1.index = df1.index.map(','.join)
df1 = df1.rename_axis('doc_3')
print (df1)
U123 U124 U126
doc_3
A,B 1 0 0
A,C 1 0 0
A,D 0 1 0
B,C 0 0 1
B,D 0 0 1
并在必要时为列添加reset_index
:
df1 = df1.reset_index()
print (df1)
doc_3 U123 U124 U126
0 A,B 1 0 0
1 A,C 1 0 0
2 A,D 0 1 0
3 B,C 0 0 1
4 B,D 0 0 1
如果要建立索引,则将reset_index
首先从MultiIndex
到pop
的列中,以提取列:
df1 = pd.get_dummies(df.doc_num).sort_index(level=0).reset_index()
df1.index = df1.pop('doc1') + ',' + df1.pop('doc2')
df1 = df1.rename_axis('doc_3')
print (df1)
U123 U124 U126
doc_3
A,B 1 0 0
A,C 1 0 0
A,D 0 1 0
B,C 0 0 1
B,D 0 0 1
或将insert
用于新列:
df1 = pd.get_dummies(df.doc_num).sort_index(level=0).reset_index()
df1.insert(0, 'doc_3', df1.pop('doc1') + ',' + df1.pop('doc2'))
print (df1)
doc_3 U123 U124 U126
0 A,B 1 0 0
1 A,C 1 0 0
2 A,D 0 1 0
3 B,C 0 0 1
4 B,D 0 0 1
答案 2 :(得分:0)
您可以尝试以下代码。它将两列合并为一个。另外,在它们之间添加“,”。
df['doc_3'] = df['doc1'] + "," + df['doc2']
然后您可以删除前两列