【发布时间】:2022-02-21 23:40:04
【问题描述】:
以下是 1,2 或 3 星评级的项目示例。 我正在尝试计算每个月的所有项目评级(星级)组合。
在以下示例中,项目 10 在第 1 个月进行了评级,并且有两个评级等于 1,一个评级等于 2,一个评级等于 3。
inp = pd.DataFrame({'month':[1,1,1,1,1,2,2,2],
'item':[10,10,10,10,20,20,20,20],
'star':[1,2,1,3,3,2,2,3]}
)
month item star
0 1 10 1
1 1 10 2
2 1 10 1
3 1 10 3
4 1 20 3
5 2 20 2
6 2 20 2
7 2 20 3
对于上面给定的输入帧输出应该是:
month item star_1_cnt star_2_cnt star_3_cnt
0 1 10 2 1 1
1 1 20 0 0 1
2 2 20 0 2 1
我正在尝试从以下代码开始解决问题, 哪个结果仍然需要转换为输出帧的所需格式,并且给出了错误的答案:
1 20 3 (1, 1)
2 20 3 (1, 1)
无论如何,应该有更好的方法来创建输出表,然后敲定这个:
months = [1,2]
items = [10,20]
stars = [1,2,3]
d = {'month': [], 'item': [], 'star': [], 'star_cnts': [] }
for month in months:
for star in stars:
for item in items:
star_cnts=dict(inp[(inp['item']==item) & (inp['star']==star)].value_counts()).values()
d['month'].append(month)
d['item'].append(item)
d['star'].append(star)
d['star_cnts'].append(star_cnts)
pd.DataFrame(d)
month item star star_cnts
0 1 10 1 (2)
1 1 20 1 ()
2 1 10 2 (1)
3 1 20 2 (2)
4 1 10 3 (1)
5 1 20 3 (1, 1)
6 2 10 1 (2)
7 2 20 1 ()
8 2 10 2 (1)
9 2 20 2 (2)
10 2 10 3 (1)
11 2 20 3 (1, 1)
【问题讨论】: