【需求】
很多个用户同时对n个题进行作答并得到结果,数据格式如下:
现在想通过一系列转换得到如下形式的数据框:
【Python实现】
操作之前,现将相关的包导入,如下:
import numpy as np
from pandas import DataFrame
1、首先是读取数据,方法如下:
def load_data(file_path):
'''
导入数据
:param file_path: 数据存放路径
:return: 返回数据列表
'''
f = open(file_path)
data = []
for line in f.readlines():
row = [] # 记录每一行
lines = line.strip().split("\t")
for x in lines:
row.append(x)
data.append(row)
f.close()
return data
2、进行转换操作
def transform_method(data):
'''
转换方法
:param data: 读进来的数据列表
:return: 返回转换后的数据框
'''
a = set()
b = set()
for i in range(len(data)):
a.add(data[i][0])
b.add(data[i][1])
a = list(a)
b = list(b)
res = []
for x in range(len(a)): # 进行对比,将对应的结果存到对应的位置
for z in range(len(b)):
for y in range(len(data)):
if a[x] == data[y][0] and b[z] == data[y][1]:
res.append(data[y][2])
res = b + res
res = np.array(res).reshape(len(a) + 1, len(b))
result = DataFrame(res) # 转换为数据框,便于调用to_csv()方法进行存储
result.to_csv(path + "res.csv", header=None, index=False, sep="\t")
return result
3、查看结果
(1)数据处理之前:
(2)数据处理之后