gpt4 book ai didi

python - 将用户/项目交互转变为稀疏列表,删除重复项

转载 作者:行者123 更新时间:2023-12-01 05:30:51 26 4
gpt4 key购买 nike

我想使用事务数据构建一个稀疏列表,其中每个新行都包含用户的以空格分隔的项目 ID 列表,然后将结果写入文件。我陷入了一种有效的方式来制作独特的行。以下是一些示例输入:

# Make input
d = pd.DataFrame([1,1,2,2,3,4,4], columns=['userID'])
d['itemID'] = [2,3,2,4,1,2,4]
d['code'] = ['AA', 'AA', 'AB', 'AA', 'AB', 'AB', 'AC']
print d

# Group by userID
print d.groupby(by='userID').head()

# Return the country codes
codes = list(d.groupby("userID")["code"].first())

# Grab the list of itemID's for each userID
b = d.groupby("userID")["itemID"].unique()
dd = pd.DataFrame(b, columns=['itemID']).reset_index()
dd['code'] = codes # Set the code column
print dd

#print dd.drop_duplicates(cols=["code", "itemID"])

最后一行(如果未注释)给出错误:

"ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"

因为 itemID 列包含多个列。

有更好的方法吗?

这是上述代码的输出:

   userID  itemID code
0 1 2 AA
1 1 3 AA
2 2 2 AB
3 2 4 AA
4 3 1 AB
5 4 2 AB
6 4 4 AC
userID itemID code
userID
1 0 1 2 AA
1 1 3 AA
2 2 2 2 AB
3 2 4 AA
3 4 3 1 AB
4 5 4 2 AB
6 4 4 AC
userID itemID code
0 1 [2, 3] AA
1 2 [2, 4] AB
2 3 [1] AB
3 4 [2, 4] AB

在最终输出中,我想删除索引 3,因为它是索引 1 的重复项,因为“itemID”和“code”列是重复的。我不关心用户ID。

期望的输出:

   userID  itemID code
0 1 [2, 3] AA
1 2 [2, 4] AB
2 3 [1] AB

最佳答案

尝试使用元组而不是列表。您需要传递一些可散列的内容才能使 drop_duplicates 内部的比较正常工作:

>>> dd = pd.DataFrame(b.map(lambda x: tuple(x)), columns=['itemID']).reset_index()
>>> dd['code'] = codes
>>> dd.drop_duplicates(cols=["code", "itemID"])
userID itemID code
0 1 (2, 3) AA
1 2 (2, 4) AB
2 3 (1,) AB

关于python - 将用户/项目交互转变为稀疏列表,删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20336180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com