pandas - 熊猫放弃不变的日子
问题描述
当仪器发生故障并记录一整天的重复测量时,我需要从数据集中删除一整天。在下面的示例中,我想删除 2020-08-27 的所有行并保留 2020-08-28 的所有行。
dates = ['2020-08-27', '2020-08-27', '2020-08-27', '2020-08-28', '2020-08-28', '2020-08-28']
values = [100, 100, 100, 200, 201, 200]
df = pd.DataFrame({"date": dates, "value": values})
date value
0 2020-08-27 100
1 2020-08-27 100
2 2020-08-27 100
3 2020-08-28 200
4 2020-08-28 201
5 2020-08-28 200
这是我尝试过但无法正常工作的代码:
df.drop_duplicates(subset=["date", "value"], keep=False)
date value
4 2020-08-28 201
这样做的正确方法是什么?
编辑:事实证明,我需要它来处理多个值列。同样在这种情况下,我想保留 2020-08-28 行。
dates = ['2020-08-27', '2020-08-27', '2020-08-27', '2020-08-28', '2020-08-28', '2020-08-28', '2020-08-28']
values1 = [100, 100, 100, 200, 201, 201, 200]
values2 = [300, 300, 300, 300, 301, 301, 300]
df = pd.DataFrame({"date": dates, "value1": values1, "value2": values2})
date value1 value2
0 2020-08-27 100 300
1 2020-08-27 100 300
2 2020-08-27 100 300
3 2020-08-28 200 300
4 2020-08-28 201 301
5 2020-08-28 201 301
6 2020-08-28 200 300
解决方案
让我们尝试groupby
使用transform
+nunique
作为条件来切片数据帧:
df[df.groupby('date')['value'].transform('nunique').ne(1)]
输出:
date value
3 2020-08-28 200
4 2020-08-28 201
5 2020-08-28 200
详细信息:按天分组并检查您是否有多个不同的值。
更新以处理多列:
df[df.groupby('date')[['value1', 'value2']].transform('nunique').ne(1).all(axis=1)]
输出:
date value1 value2
3 2020-08-28 200 300
4 2020-08-28 201 301
5 2020-08-28 201 301
6 2020-08-28 200 300
推荐阅读
- mysql - 在查询结果列表中获取某个结果的索引?
- python - 如何使用 IDAPython 获取 smali 寄存器值
- performance - 在高分辨率图像是关键内容的网站上,我可以指示 Lighthouse 不将它们包括在“适当大小的图像”检查中吗?
- python - FastAPI 中的字段屏蔽(部分对象获取),如 Flask-Restx/Flask-RestPlus
- python-3.5 - 从A类中的方法访问变量并在python3.5的B类中使用它
- kotlin - 如何只记录一行错误消息而不是我的代码的几条错误消息
- linux - 解决从 Hyper-V 主机到来宾 VM 的文件传输问题的脚本
- html - 在 :after 伪元素上出现换行问题
- git - 处理 package.json 依赖合并冲突的脚本
- reactjs - 在 React 页面中添加 Angular 1.8 组件