Python 使用熊猫检测重复组
我有一个带有日期字段的表,我想检测数据不重复的日期。让我们假设数据如下所示:Python 使用熊猫检测重复组,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有日期字段的表,我想检测数据不重复的日期。让我们假设数据如下所示: Day Code Value 01/03/2020 A 10 01/03/2020 B 15 01/03/2020 C 20 02/03/2020 A 10 02/03/2020 B 15 02/03/2020 C 20 03/03/2020 A 10 03/03/2020 B 20 03/03/2020 C 20 04/03/2020 A 10
Day Code Value
01/03/2020 A 10
01/03/2020 B 15
01/03/2020 C 20
02/03/2020 A 10
02/03/2020 B 15
02/03/2020 C 20
03/03/2020 A 10
03/03/2020 B 20
03/03/2020 C 20
04/03/2020 A 10
04/03/2020 B 15
我想按天对数据进行分组。在本例中,2020年3月2日与2020年3月1日相同。然而,在2020年3月3日,B的值发生了变化。此外,在2020年3月4日,代码C已消失
我看到的第一种方法是循环数据,按天(a)过滤数据集,并通过检查a.equals(b)
是否为TRUE
将结果与前一天的切片进行比较。我知道这是可行的,但它根本没有效率,因为这意味着需要进行大量的切片
是否有任何groupby
操作可以完成该任务
非常感谢。如果我理解正确,这是删除重复天数的一种方法,即(
code
,Value
)对与其他日期完全匹配的天数
unstacked = df.set_index(['Day', 'Code']).unstack()
unstacked
Value
Code A B C
Day
01/03/2020 10.0 15.0 20.0
02/03/2020 10.0 15.0 20.0
03/03/2020 10.0 20.0 20.0
04/03/2020 10.0 15.0 NaN
res = unstacked.drop_duplicates().stack().reset_index()
res['Value'] = res['Value'].astype(int)
res
Day Code Value
0 01/03/2020 A 10
1 01/03/2020 B 15
2 01/03/2020 C 20
3 03/03/2020 A 10
4 03/03/2020 B 20
5 03/03/2020 C 20
6 04/03/2020 A 10
7 04/03/2020 B 15
我们可以使用
GroupBy.agg
然后使用duplicated
删除重复项:
dups = df.astype(str).groupby('Day').agg(''.join).duplicated()
df[~df['Day'].map(dups)]
Day Code Value
0 01/03/2020 A 10
1 01/03/2020 B 15
2 01/03/2020 C 20
6 03/03/2020 A 10
7 03/03/2020 B 20
8 03/03/2020 C 20
9 04/03/2020 A 10
10 04/03/2020 B 15
你能把预期的产量也加上吗?非常感谢。它工作得很好,也很简单。谢谢谢谢你的方法。它也很有效。我觉得这比彼得的建议不那么直观,但效果也很好。非常感谢。