gpt4 book ai didi

Python Pandas - 如果不在第二个数据框中,则从第一个数据框中删除值

转载 作者:行者123 更新时间:2023-11-28 21:58:33 24 4
gpt4 key购买 nike

我有推荐人的用户/项目数据。我将其拆分为测试和训练数据,并且我需要确保在评估推荐系统之前省略测试数据中的任何新用户或项目。我的方法适用于小型数据集,但当它变大时,就需要永远。有更好的方法吗?

# Test set for removing users or items not in train
te = pd.DataFrame({'user': [1,2,3,1,6,1], 'item':[16,12,19,15,13,12]})
tr = pd.DataFrame({'user': [1,2,3,4,5], 'item':[11,12,13,14,15]})
print "Training_______"
print tr
print "\nTesting_______"
print te

# By using two joins and selecting the proper indices, all 'new' members of test set are removed
b = pd.merge( pd.merge(te,tr, on='user', suffixes=['', '_d']) , tr, on='item', suffixes=['', '_d'])[['user', 'item']]
print "\nSolution_______"
print b

给予:

Training_______
item user
0 11 1
1 12 2
2 13 3
3 14 4
4 15 5

Testing_______
item user
0 16 1
1 12 2
2 19 3
3 15 1
4 13 6
5 12 1

Solution_______
user item
0 1 15
1 1 12
2 2 12

解决方案是正确的(任何新用户或项目都会导致整行从测试中删除。但它在规模上很慢。

提前致谢。

最佳答案

我认为您可以使用 isin 实现您想要的效果每列的系列方法:

In [11]: te['item'].isin(tr['item']) & te['user'].isin(tr['user'])
Out[11]:
0 False
1 True
2 False
3 True
4 False
5 True
dtype: bool

In [12]: te[te['item'].isin(tr['item']) & te['user'].isin(tr['user'])]
Out[12]:
item user
1 12 2
3 15 1
5 12 1

在 0.13 中,您将能够使用新的 DataFrame isin 方法 ( on current master ):

In [21]: te[te.isin(tr.to_dict(outtype='list')).all(1)]
Out[21]:
item user
1 12 2
3 15 1
5 12 1

希望通过发布 syntax should be a bit better发布时:

te[te.isin(tr).all(1)]

关于Python Pandas - 如果不在第二个数据框中,则从第一个数据框中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18112396/

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