我的形状数据如下:
pd.DataFrame({'id': [1,2,3], 'item': ['item_a', 'item_a', 'item_b'],
'score': [1,-1,1]})
id item score
1 item_a 1
2 item_a -1
3 item_b 1
我想获取项目列的虚拟代码,但我希望它们根据分数列中的值进行评分。如果没有观察,我想要一个0估算。像这样:
id item_a item_b
1 1 0
2 -1 0
3 0 1
如你所见,我想捕获用户id 1喜欢item_a,id 2不喜欢item_a,并且用户3没有与item_a交互。id列每行不唯一 - 例如,用户ID 3可能喜欢item_a,并且将在原始数据帧中记录为新行。
我已尝试在pandas中使用get_dummies,但该方法仅计算“item”列中观察值的数量,但未考虑得分值。
解决办法:
可以使用set_index + 拆散:
import pandas as pd
df = pd.DataFrame({'id': [1,2,3], 'item': ['item_a', 'item_a', 'item_b'],
'score': [1,-1,1]})
print(df.set_index(['id', 'item'])['score'].unstack(fill_value=0))
产量
item item_a item_b
id
1 1 0
2 -1 0
3 0 1
如果要完全匹配输出,只需添加以下行:
result.columns.name = None
result.reset_index(inplace=True)
产量
id item_a item_b
0 1 1 0
1 2 -1 0
2 3 0 1








暂无数据