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

时间:2018-04-10 03:45:19

标签: python excel pandas feature-extraction

与以前没什么不同。我们可以从示例数据开始:

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

(注意:它不需要具有编号的头部标题,我只是为了清晰和后面的解释而这样做。)

基本上我所做的是,非常类似于另一个,查找每个名称,然后对于每个名称,它看起来有多少不同的号码。然后它选择具有一定数量的不同号码的人。 现在,我想要一套“评论”和“报告” ({不相关,无论如何,无论如何}和{Awesome,Solid,Perfect}分别[注意:这只是评论/报告的一个子集])对于这些我想要一个1或0如果它出现但只针对每个否换句话说,我希望每个号码都有一个标题为{Irrelevant,Whatever,Regardless}和{Awesome,Solid,Perfect}的列的“组”,并且对于每个值,我想要1,如果它出现在特定号码,如果没有则为0。

在这个矩阵中,例如,我们只看到John,因为他是唯一一个具有多于1个不同的编号。在第一组列中,只有Irrelevant和Awesome的值为1,而其余的值为0,而在第二列中只有团队无论如何,完美将拥有1。它所做的是它列出了我所需的所有评论/报告({不相关,无论如何,无论如何}和{真棒,坚实,完美})只有一个号码,然后发现每个是否出现(1或0)。然后,它在一个新的“组”列中重复了所有所需的评论/报告,以获得新的编号。对于这个新的编号,我们发现了哪些评论/报告现在出现了。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试:

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  

​