【发布时间】:2020-07-23 18:27:44
【问题描述】:
我有一个 pandas 数据框,其中有行不一致。在下面的例子中key1和key2是两个值放在一起必须是唯一的,所以(key1 ,key2)是主键,应该在dataframe中出现一次,而info是(key1 ,key2)的二进制信息并且可以是T 或F。不幸的是,(key1 ,key2) 在数据框中重复出现,有时它们有info=T,有时有info=F,这显然是一个错误。
为了消除重复,我想采用以下推理:我想计算多少次(对于同一对夫妇(key1 ,key2))info 是T 和多少次info 是@987654335 @和
- 如果频率不同(大部分时间)保持
只有在
T之间具有最频繁值的行之一 和F具有类似df.drop_duplicates(subset = ["key1","key2"] , keep = "first")的函数,其中first应该是 最常见值为info的行。 - 如果改为 50%
行有
info=T,50% 有info=F,我想删除所有 他们,因为我不知道哪个是正确的功能 喜欢df.drop_duplicates(subset = ["key1","key2"] , keep = False)。
我不知道如何进行这种过滤,因为我想在一种情况下保留 1 行,在另一种情况下保留 0 行,具体取决于相似行组中特定列的值。
期望的行为
在:
key1 key2 info
0 a1 a2 T
1 a1 a2 T #duplicated row of index 0
2 a1 a2 F #similar row of indexes 0 and 1 but inconsistent with info field
3 b1 b2 T
4 b1 b2 T #duplicated row of index 3
5 b1 b3 T #not duplicated since key2 is different from indexes 3 and 4
6 c1 c2 T
7 c1 c2 F #duplicated row of index 5 but inconsistent with info field
输出:
key1 key2 info
0 a1 a2 T # for(a1,a2) T:2 and F:1
3 b1 b2 T # for(b1,b2) T:2 and F:0
5 b1 b3 T # for(b1,b3) T:1 and F:0
# no rows for (c1,c2) because T:1 and F:1
谢谢
【问题讨论】:
标签: python pandas dataframe duplicates