我有一个要从数据集中检索数据的列表。
以下是列表:
packed = [1, 5, 8, 2, 3, 3, 7, 3, 7, 7, 4, 6, 3]
这是数据集
有两个数量较多的商品,即3和7
我想提取那些不在打包列表中的行。在这种情况下,它的两倍为7(剩余3已在列表中) 我怎样才能做到这一点?我试过了,但这不起作用
new_df= data[~data["Pid"].isin(packed)].reset_index(drop=True)
答案 0 :(得分:1)
将GroupBy.cumcount
与助手DataFrame
一起使用,将merge
与左联接和indicator=True
一起使用,最后由boolean indexing
进行过滤:
packed = [1, 5, 8, 2, 3, 3, 7, 3, 7, 7, 4, 6, 3]
df1 = pd.DataFrame({'Pid':packed})
df1['g'] = df1.groupby('Pid').cumcount()
print (df1)
Pid g
0 1 0
1 5 0
2 8 0
3 2 0
4 3 0
5 3 1
6 7 0
7 3 2
8 7 1
9 7 2
10 4 0
11 6 0
12 3 3
data['g'] = data.groupby('Pid').cumcount()
new_df = data[data.merge(df1, indicator=True, how='left')['_merge'].eq('left_only')]