繁体   English   中英

使用 Pandas 检测重复组

[英]Detect duplicated groups with Pandas

我有一个带有日期字段的表,我想检测数据不重复的日期。 让我们想象一下数据如下:

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

我想按天对数据进行分组。 在示例中,02/03/2020 日与 01/03/2020 相同。 但是,在 2020 年 3 月 3 日,B 的值发生了变化。 此外,在 2020 年 4 月 3 日,代码 C 消失了。

我看到的第一种方法是循环遍历按天 (a) 过滤数据集的数据,并通过检查a.equals(b)是否为TRUE将结果与 (b) 前一天的切片进行比较。 我知道这行得通,但它根本没有效率,因为这意味着要进行大量切片。

是否有任何group_by操作可以完成任务?

非常感谢。

如果我理解正确的话,这是删除重复天数的一种方法,即那些 ( 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM