Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅从购买的物品中删除受欢迎的物品,并保留其他物品?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何仅从购买的物品中删除受欢迎的物品,并保留其他物品?

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

如何从购买中删除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': [ 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个)