python在使用pandas get\u dummies之后是否可以concat列?

2024-06-02 09:06:44 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的例子

         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

有可能吗?先谢谢你


Tags: dfgetindexdocdoc1sortlevelnum
3条回答

除了@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

现在你真的得到了你想要的结果。你知道吗

我认为您需要将两个级别的MultiIndex连接起来,将索引名设置为^{}

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

如有必要,在列中添加^{}

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

或者如果需要索引,则使用^{}MultiIndex到列的第一个^{}到列:

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

或对新列使用^{}

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

你可以试试下面的代码。它将两列合并为一列。另外,在它们之间加上“,”。你知道吗

df['doc_3'] = df['doc1'] + "," + df['doc2']

然后可以删除前两列

相关问题 更多 >