python - 从数据框中提取数据
问题描述
我有一个列表,我想根据该列表从数据集中检索数据。
这是列表:
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)
解决方案
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')]
推荐阅读
- node.js - 如何将字符串推送到 dynamoDB 中的数组中?
- reactjs - 为反应 charjs2 设置选项/自定义标签
- javascript - 状态未使用 useState 设置方法更新
- angular - GET http://localhost:8000/api net::ERR_CONNECTION_REFUSED
- android - HttpURLConnection 为 Http 代码 407 抛出异常
- spring - 将 ConnectableFlux 用于热流 REST 端点
- identityserver3 - Identity Server 3:如何获取超时/会话过期事件?
- sorting - 对列表进行排序时,使用的列表类型是否应确定选择哪种排序算法
- mongodb - 获取给定范围的文档(上下,而不是之间)
- batch-file - 如何定义一个文件夹来搜索和搜索日期范围内小于 X KB 的文件?