首页 > 解决方案 > 从数据框中提取数据

问题描述

我有一个列表,我想根据该列表从数据集中检索数据。

这是列表:

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)

标签: pythonpython-3.xpandas

解决方案


GroupBy.cumcount与助手一起使用DataFramemerge与左连接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')]

推荐阅读