[英]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.