python - 如何对相似的行进行分组?
问题描述
嘿伙计们,我有一个关于根据名称对行进行分组的问题。
下面是我的数据集:
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 中执行此操作。我对此很陌生,我知道我们可以使用一种热编码来创建二进制变量,但我不确定如何合并基于相同名称的行并分离主题。
- 如何合并基于相同名称的行?
- 您如何为由“,”分隔的主题创建单独的列
- 之后如何为所有这些创建二进制变量?
解决方案
对于初学者来说,您的问题非常复杂。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()
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
推荐阅读
- algorithm - 如何重新连接节点之间的边缘并获得最大可能大小?
- sql - 确保没有重叠的约束,但仅限于某些情况下,并且需要解决冲突?
- python - 基于多列熊猫创建新列
- swift - Swift Playground 导入 CreateMLUI 失败 Xcode 12.4 BigSur
- ios - 测试view的前景颜色
- java - Exchange Web 服务订阅错误 - javax.net.ssl.SSLException:对等方重置连接:套接字写入错误
- c++ - 传递变量或放置具有相同内容的 ip 字符串时,asio 客户端应用程序会产生不同的结果
- pandas - hv.Slope.from_scatter,无论如何要为此计算出系数?
- android - React Native 中的静态 PDF 使用 React-Native-Pdf
- javascript - 如何在 JS 中不显示函数返回消息的情况下获取键值对