给定大的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
DataFrame2:
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
所以基本上它会查找每个名称,然后对于每个名称,它会查看它有多少不同的号码,并且对于每个不同的号码,它会搜索"注释"和"报告"是的,然后是一些具体的评论 {不相关,无论如何,无论如何}和报告{Awesome,Solid,Perfect}它会检查它是否出现。如果是,则输出1,如果不是,则在如上所述的excel表中输出0。虽然Bob出现了两次,但由于两次他都有相同的号码,所以不算数,John是唯一的相关人物。因此,对于约翰的第2139300号而言,他对于无关紧要和令人敬畏的人而言,并且对于他的第2234903号而言,无论如何都是完美无缺的。
新:
. -----------------------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
此外,由于格式化有点奇怪,我的意思是将它全部放在一行。
澄清:这看起来很相似,但与我之前提出的问题不同。我已经为这个问题创建了一个新问题,因为我已被告知要这样做。
非常感谢你。
答案 0 :(得分:1)
您可以尝试这样的事情:
首先重命名'报告'列到'评论'对齐concat的数据帧:
df_out = pd.concat([df1,df2.rename(columns={'Report':'Comment'})],ignore_index=False)
过滤具有多个号码的名称的数据帧,然后使用get_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