首页 > 解决方案 > 如何对相似的行进行分组?

问题描述

嘿伙计们,我有一个关于根据名称对行进行分组的问题。

下面是我的数据集:

Name      University            Subject              

John      Harvard               English, French
John      MIT                   Economics
Alan      BU                    Data Science

我想要以下输出:

Name   Harvard   MIT   BU    English   French   Economics   Data Science
  
John      1       1     0       1         1        1            0
Alan      0       0     1       0         0        0            1

请让我知道如何在 Python 中执行此操作。我对此很陌生,我知道我们可以使用一种热编码来创建二进制变量,但我不确定如何合并基于相同名称的行并分离主题。

  1. 如何合并基于相同名称的行?
  2. 您如何为由“,”分隔的主题创建单独的列
  3. 之后如何为所有这些创建二进制变量?

标签: python

解决方案


对于初学者来说,您的问题非常复杂。pandas您可以执行以下操作。

当您从文件加载数据时,此步骤不是必需的。
使用文本输入设置数据框。

import pandas as pd
import io

t =  '''
Name      University            Subject              

John      Harvard               English, French
John      MIT                   Economics
Alan      BU                    Data Science'''

df = pd.read_csv(io.StringIO(t), sep='\s\s+', engine='python')
df

出去:

   Name University          Subject
0  John    Harvard  English, French
1  John        MIT        Economics
2  Alan         BU     Data Science

在列Subject split中将一行中的多个值放入列表中

df['Subject'] = df.Subject.str.split(', ')

Explode列表和melt长数据格式。记住列的顺序

ser = df.explode('Subject').melt('Name').drop('variable', 1)
order = ser.value.unique()

get_dummies使用and获取二进制变量groupby('Name')

(pd.get_dummies(
    ser, columns=['value'], prefix='', prefix_sep='')
    .groupby('Name', sort=False).max()
)[order]

出去:

      Harvard  MIT  BU  English  French  Economics  Data Science
Name                                                            
John        1    1   0        1       1          1             0
Alan        0    0   1        0       0          0             1

推荐阅读