Python 中的分组特征矩阵 #2- 跟进

Grouped Feature Matrix in Python #2- Follow Up

和以前没什么区别。我们可以从示例数据开始:

DataFrame1:

Name         No.        Comment    
Bob        2123320     Doesn't Matter   
Joe        2832883     Whatever           
John       2139300     Irrelevant        
Bob        2123320     Something          
John       2234903     Regardless

DataFrame2:

Name          No.          Report    
Bob        2123320         Great 
Joe        2832883         Solid           
John       2139300        Awesome        
Bob        2123320         Good          
John       2234903        Perfect

我正在寻找一种方法来制作新的 excel 文件,如下所示(预期结果):

     -----------------------2139300---------------------  2234903----                    
Name Irrelevant Whatever Regardless Awesome Solid Perfect  Irrelevant \
John    1          0       0          1      0     0         0
      --------------------2234903-------------
Name Whatever Regardless Awesome Solid Perfect  
John    0       1         0        0      1

(注意:不需要编号的head-titles,我只是为了清楚和后面的解释才这样做的)。

基本上我所做的是,与另一个非常相似,查找每个名称,然后针对每个名称查看它有多少个不同的编号。然后,它会选择具有一定数量的不同编号的人。 现在,我有一组 "Comments" 和 "Reports" 我想找 ({Irrelevant, Whatever, Regardless} 和 {Awesome, Solid, Perfect} 分别 [注意:这只是 Comments/Reports] 的一个子集),对于这些,如果出现,我希望有 1 或 0,但仅限于每个编号换句话说,我希望每个编号都有一个 "group" 列,标题为 {Irrelevant, Whatever, Regardless} 和 {Awesome, Solid, Perfect} 并且对于每个值,如果它出现,我想要一个 1对于该特定编号的人,如果没有则为 0。

例如,在这个矩阵中,我们只看到 John,因为他是唯一一个拥有超过 1 个不同编号的人。在第一组列中,只有 Irrelevant 和 Awesome 的值为 1,而其余的值为 0,并且在第二组只有 Regardless 和 Perfect 会有 1。它所做的是它列出了我想要的所有 Comments/Reports({不相关,随便,不管} 和 {Awesome,Solid,Perfect})只有一个编号,然后找出每个编号是否出现(1 或 0 ).然后它在一个新的 "group" 列中重复所有需要的 Comments/Reports 以获得一个新编号,并且对于这个新编号,找出现在出现的 Comments/Reports。

如果有任何不清楚的地方,请告诉我,非常感谢您的帮助。

谢谢。

尝试:

df_out = df_out[df_out.groupby(['Name'])['No.'].transform(lambda x: x.nunique() > 1)]\
   .set_index(['Name','No.'])['Comment'].str.get_dummies()\
   .reindex(df_out.Comment, fill_value=0, axis=1)\
   .sum(level=[0,1])\
   .unstack()\
   .swaplevel(0,1,axis=1)\
   .sort_index(1)

print(df_out)

输出:

No.     2139300                                                                \
Comment Awesome Doesn't Matter Good Great Irrelevant Perfect Regardless Solid   
Name                                                                            
John          1              0    0     0          1       0          0     0   

No.                        2234903                                       \
Comment Something Whatever Awesome Doesn't Matter Good Great Irrelevant   
Name                                                                      
John            0        0       0              0    0     0          0   

No.                                                  
Comment Perfect Regardless Solid Something Whatever  
Name                                                 
John          1          1     0         0        0  

​