如何通过熊猫在数据框中按不同顺序删除相同值的重复行

时间:2018-08-27 01:04:14

标签: python-3.x pandas

如何删除df中的重复项? df只有1栏。在这种情况下,“ 60,25”和“ 25,60”是一对重复的行。输出应为新的df。对于每对重复的行,保留行的格式为“ A,B”,其中A B。在这种情况下,应保留“ 25,60”和“ 80,123”。对于唯一的行,它应该保持不变。

enter image description here

2 个答案:

答案 0 :(得分:2)

IIUC,将get_dummiesduplicated一起使用

df[~df.A.str.get_dummies(sep=',').duplicated()]
Out[956]: 
       A
0    A,C
1    A,B
4  X,Y,Z

数据输入

df
Out[957]: 
       A
0    A,C
1    A,B
2    C,A
3    B,A
4  X,Y,Z
5  Z,Y,X

更新op将问题完全更改为其他问题

newdf=df.A.str.get_dummies(sep=',')
newdf[~newdf.duplicated()].dot(newdf.columns+',').str[:-1]
Out[976]: 
0     25,60
1    123,37
dtype: object

答案 1 :(得分:1)

我会做很多事情。

  1. 使用pandas.Series.str.split以逗号分隔
  2. 使用apply(frozenset)获取可散列集,以便我可以使用duplicated
  3. pandas.Series.duplicatedkeep='last'一起使用

df[~df.A.str.split(',').apply(frozenset).duplicated(keep='last')]

        A
1  123,17
3  80,123
4   25,60
5   25,42

发表评论

df.A.apply(
    lambda x: tuple(sorted(map(int, x.split(','))))
).drop_duplicates().apply(
    lambda x: ','.join(map(str, x))
)

0     25,60
1    17,123
2    80,123
5     25,42
Name: A, dtype: object

设置

df = pd.DataFrame(dict(
    A='60,25 123,17 123,80 80,123 25,60 25,42'.split()
))