Python 将用户/项目交互转换为稀疏列表删除重复项
我想使用事务数据构建一个稀疏列表,其中每一新行都由用户的条目ID的空格分隔列表组成,然后将结果写入一个文件。 我一直在寻找一种生成唯一行的有效方法。以下是一些示例输入:Python 将用户/项目交互转换为稀疏列表删除重复项,python,pandas,Python,Pandas,我想使用事务数据构建一个稀疏列表,其中每一新行都由用户的条目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 # Gr
# 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:包含多个元素的数组的真值为
不明确。请使用a.any()或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\u 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