我正在尝试从一个文件创建一个pandas Data Frame,其格式类似于逗号分隔值,但没有标题行。在每一行上,该文件包含用户ID,电影ID和相应用户给出相应电影的评级。我想把它变成一个数据框,其中包含y轴的电影ID,x轴的用户ID,以及每个“单元格”中的值。我怎样才能做到这一点?到目前为止,我所看到的一切只允许我设置y轴,而不是直接从逗号分隔值读取到数据帧时设置x轴。
数据格式:(时间是最后一个,我可以将其删除,因为目的是计算用户之间的评分相似度
1 1 5 874965758
1 2 3 876893171
1 3 4 878542960
1 4 3 876893119
1 5 3 889751712
1 7 4 875071561
1 8 1 875072484
1 9 5 878543541
1 11 2 875072262
1 13 5 875071805
答案 0 :(得分:1)
这是通过pandas.pivot_table
:
import pandas as pd, numpy as np
from io import StringIO
mystr = StringIO("""1 1 5 874965758
1 2 3 876893171
1 3 4 878542960
1 4 3 876893119
1 5 3 889751712
1 7 4 875071561
2 2 1 875072484
2 3 5 878543541
2 4 2 875072262
2 5 5 875071805 """)
# read csv file, replace mystr with 'file.csv'
df = pd.read_csv(mystr, delim_whitespace=True, header=None,
usecols=[0, 1, 2], names=['user', 'movie', 'rating'])
# restructure dataframe via pivot_table
res = df.pivot_table(index='movie', columns='user', values='rating',
fill_value=0, aggfunc=np.mean)
print(res)
# user 1 2
# movie
# 1 5 0
# 2 3 1
# 3 4 5
# 4 3 2
# 5 3 5
# 7 4 0
答案 1 :(得分:0)