嘿,我有一个问题要根据名称对行进行分组。
下面是我的数据集:
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中执行此操作。我对此很陌生,我知道我们可以使用一种热编码来创建二进制变量,但是我不确定如何根据相同的名称合并行并分隔主题。
答案 0 :(得分:1)
对于初学者,您的问题涉及很多。使用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(', ')
ser = df.explode('Subject').melt('Name').drop('variable', 1)
order = ser.value.unique()
获取二进制变量
(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