Pandas 熊猫的日子一成不变
当仪器发生故障并记录了一整天的重复测量值时,我需要从数据集中删除整天的数据。在下面的示例中,我希望删除2020-08-27的所有行,并保留2020-08-28的所有行Pandas 熊猫的日子一成不变,pandas,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&quo
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
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
详细信息:按天分组并检查是否有多个不同的值
更新以处理多个列:
df[df.groupby('date')[['value1', 'value2']].transform('nunique').ne(1).all(axis=1)]
输出:
date value
3 2020-08-28 200
4 2020-08-28 201
5 2020-08-28 200
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
美好的有没有一种方法可以扩展到多个值列?@steve。是的,请解释列中的所有值都是相同的?@steve See update,相同的逻辑,添加了一个条件,即行中的所有值都必须等于1。