Python 如何仅从购买的物品中删除受欢迎的物品,并保留其他物品?
如何从购买中删除popularst项目 我想从我的数据框中删除最受欢迎的文章 我已经收到了前5篇文章。不幸的是,我不知道如何从我的个人购买中删除这些 例如,一次购买包含一个流行项目和两个常规项目。清理后,应移除常用物品,只保留两件物品Python 如何仅从购买的物品中删除受欢迎的物品,并保留其他物品?,python,pandas,dataframe,Python,Pandas,Dataframe,如何从购买中删除popularst项目 我想从我的数据框中删除最受欢迎的文章 我已经收到了前5篇文章。不幸的是,我不知道如何从我的个人购买中删除这些 例如,一次购买包含一个流行项目和两个常规项目。清理后,应移除常用物品,只保留两件物品 import pandas as pd d = {'purchaseid': [0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 9, 9, 9, 9], 'itemid
import pandas as pd
d = {'purchaseid': [0, 0, 0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 8, 9, 9, 9, 9],
'itemid': [ 3, 8, 2, 10, 3, 10, 4, 12, 3, 12, 3, 4, 8, 6, 3, 0, 5, 12, 9, 9, 13, 1, 7, 11, 11]}
df = pd.DataFrame(data=d)
print(df.head(5))
print(df['itemid'].nunique())
gb = df.groupby("itemid").size().nlargest(n=5, keep="first")
print(gb) # gives me the popularst items with the count
purchaseid itemid
0 0 3
1 0 8
2 0 2
3 1 10
4 2 3
14
# the popularst items
itemid
3 5
12 3
4 2
8 2
9 2
清理后我想要什么
purchaseid itemid
- - - # purchase 0 has only 2 instead of 3 purchases
0 0 8
1 0 2
2 1 10
- - - # This line should be completely removed, this is only for illustration.
请注意,大多数常用项目的itemid包含在gb的索引中
(数据示例中popularst项列表中的左列)。
gb值(右列)仅包含信息行数
包含具有特定itemid的项目的df
因此,要获取“不受欢迎”的项目,您应该选择itemid为not
在gb.index中。获得此结果的最自然的方法是布尔索引
基于这一标准:
result = df[~df.itemid.isin(gb.index)]
结果是:
purchaseid itemid
2 0 2
3 1 10
5 2 10
13 5 6
15 6 0
16 6 5
20 8 13
21 9 1
22 9 7
23 9 11
24 9 11
您的预期结果始于:
0 0 8
(0-index、0-purchaseid和8-itemid),但我认为这是一个错误。
请注意,itemid==8是5个最具极性的项目之一(共有2个)