我有一个很大的csv文件,其中每一行都是一个单独的学校课程,每一行都标记了一个或多个主题,如下所示:
| 校名|部门|课程名称|主题|
| - -|- -|- -|- -|
| A级|A1级|X轴|水果;蔬菜|
| A级|A1级|Y型|水果;谷物|
| B|地下一层|Z轴|水果; 2蔬菜;糖果|
| C类|C1级|第二十章|水果;家禽|
我需要计算每门课程中每个主题的出现情况。每个主题都需要作为自己的列附加,每行编码为0或1,具体取决于该主题是否出现在课程中。总共有49个主题,因此我需要向表中添加49行。
有4000行,其中许多行是相同课程名称的重复,因此也需要对这些行进行分组。例如,如果课程名称X的一个示例具有主题“水果”、“蔬菜”,但同一课程的另一个示例具有主题“水果”、“谷物”,则列“水果”的二进制值应该是1,“蔬菜”应该是1,“谷物”应该是1,而其余的主题列被编码为0。
输出应如下所示:
| 校名|部门|课程名称|果实|蔬菜|颗粒|糖果|家禽|
| - -|- -|- -|- -|- -|- -|- -|- -|
| A级|A1级|X轴|一个|一个|第0页|第0页|第0页|
| A级|A1级|Y型|一个|第0页|一个|第0页|第0页|
| B|地下一层|Z轴|一个|一个|第0页|一个|第0页|
| C类|C1级|第二十章|一个|第0页|第0页|第0页|一个|
如果主题是数字的,我有解决方案,但如果主题是字符串值,我不知道如何去做。
import pandas as pd
import io
df = pd.read_csv(io.BytesIO(uploaded['topics.csv']))
x = df.pop("Final Topic").str.split(r"\s*;\s*").explode()
x = pd.crosstab(x.index, x).add_prefix("topic ")
df = pd.concat([df, x], axis=1)
这段代码只将所有内容注册为0,如下所示:
| 校名|部门|课程名称|果实|蔬菜|颗粒|糖果|家禽|
| - -|- -|- -|- -|- -|- -|- -|- -|
| A级|A1级|X轴|第0页|第0页|第0页|第0页|第0页|
| A级|A1级|Y型|第0页|第0页|第0页|第0页|第0页|
| B|地下一层|Z轴|第0页|第0页|第0页|第0页|第0页|
| C类|C1级|第二十章|第0页|第0页|第0页|第0页|第0页|
我已经很长时间没有使用python了,所以我忘记了如何去做这件事。
1条答案
按热度按时间hfyxw5xn1#
第一个