Python中的分组特征矩阵

Python中的分组特征矩阵,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,给定大量excel数据(xlsx、csv或xls),是否可以对内容进行分组,然后将其作为特征矩阵,如下面的示例所示 采取: DataFrame1: Name No. Comment Bob 2123320 Doesn't Matter Joe 2832883 Whatever John 2139300 Irrelevant Bob 212

给定大量excel数据(xlsx、csv或xls),是否可以对内容进行分组,然后将其作为特征矩阵,如下面的示例所示

采取:

DataFrame1:

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
我基本上是在寻找一种方法,只选择一个名称出现两次的编号,然后列出一个特征矩阵,以确定该编号是否出现了特定的评论/报告。如下所示:

Name Irrelevant Whatever Regardless Awesome Solid Perfect  Irrelevant \
John    1          0       0          1      0     0         0
Name Whatever Regardless Awesome Solid Perfect  
John    0       1         0        0      1
因此,基本上它会查找每个名称,然后查找每个名称有多少不同的编号,对于每个不同的编号,它会搜索“评论”和“报告”是什么,然后查找一些特定的评论 {无关,不管,不管}和报告{很棒,可靠,完美}它检查它是否出现。如果是,则输出1,如果不是,则在excel表格中输出0,如上所述。虽然鲍勃出现了两次,但因为两次他都有相同的号码,这不算,约翰是唯一相关的人。因此,约翰的2139300号,他对无关紧要的和令人敬畏的有1分,对他的2234903号,他对不顾一切的和完美的有1分

新的:

另外,由于格式有点奇怪,我的意思是将所有内容放在一行中

澄清一下:这似乎与我之前提出的一个问题相似,但不同。我为这个问题创建了一个新问题,因为我被告知这样做


非常感谢。

您可以尝试以下内容:

Name Irrelevant Whatever Regardless Awesome Solid Perfect  Irrelevant \
John    1          0       0          1      0     0         0
Name Whatever Regardless Awesome Solid Perfect  
John    0       1         0        0      1
首先将“报告”列重命名为“注释”,以对齐concat的数据帧:

df_out = pd.concat([df1,df2.rename(columns={'Report':'Comment'})],ignore_index=False)
筛选数据框中包含多个编号的名称。然后使用
get\u dummies

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

Comment  Doesn't Matter  Whatever  Irrelevant  Something  Regardless  Great  \
Name                                                                          
John                  0         0           1          0           1      0   

Comment  Solid  Awesome  Good  Perfect  
Name                                    
John         0        1     0        1

这真是太棒了,非常感谢。一个简单的问题:如果我只想查找3条评论,而不是所有评论,我将如何选择一些特定的评论来查找。就像我不是{无所谓,无所谓,无所谓,无所谓},我只是想{无所谓,无所谓}。我需要为此制作一个字典吗?您可以只更改reindex部分,而不使用df.columns,因为所有列都使用['not Matter','Whatever','…]嘿。还有一个问题。我还想把数据交给No。类似于将一个编号的所有注释分组,然后重复另一个编号。我想我在OP中也提到了这一点,但我添加了一些澄清。@a.Code.1你能用样本数据和预期结果开始一个新问题吗?如果你给出了预期的结果,就更容易理解你的需求。谢谢。当然,非常感谢。我发布了一个新问题,题为:分组特征矩阵#2-后续。再次感谢。