【问题标题】:Grouped Feature Matrix in Python #2- Follow UpPython 中的分组特征矩阵 #2- 跟进
【发布时间】:2018-04-10 12:03:38
【问题描述】:

和以前没有太大区别。我们可以从样本数据开始:

数据帧1:

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

数据帧2:

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

(注意:不需要有编号的头衔,我只是为了清楚起见和稍后解释)。

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

例如,在这个矩阵中,我们只看到 John,因为他是唯一一个拥有超过 1 个不同编号的人。在第一组列中,只有 Irrelevant 和 Awesome 的值为 1,而其余列的值为 0,而在第二组中仅组无论和完美将有 1。它所做的只是列出了我想要的所有评论/报告({Irrelevant,Whatever,Anything} 和 {Awesome,Solid,Perfect}),只列出一个编号,然后找出每个评论/报告是否出现(1 或 0)。然后,它在一个新的“组”列中重复所有所需的评论/报告,以获得新的编号,并为这个新编号找出现在出现的评论/报告。

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

谢谢。

【问题讨论】:

    标签: python excel pandas feature-extraction


    【解决方案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  
    
    ​
    

    【讨论】:

    • 令人难以置信的惊人!非常感谢
    • @A.Code.1 不客气。抱歉,我让你重新发布,但有时看到所需的输出比文字更有意义。编码愉快。
    • 再次感谢。我真的很喜欢你的编码方法和描述。我还有另一个问题,我仍然不清楚 stackoverflow.com/questions/49503422/… 的类似问题。你觉得你能解决这个问题吗
    • 嘿伙计。在这么短的时间内用这么多问题轰炸你,我真的很难过,但我决定尝试为这个问题增加另一个维度。我决定创建一个明确描述输入和输出的新帖子,如果您有时间查看它,我将不胜感激:stackoverflow.com/questions/49763973/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多