如何删除df中的重复项? df只有1栏。在这种情况下,“ 60,25”和“ 25,60”是一对重复的行。输出应为新的df。对于每对重复的行,保留行的格式为“ A,B”,其中A B。在这种情况下,应保留“ 25,60”和“ 80,123”。对于唯一的行,它应该保持不变。
答案 0 :(得分:2)
IIUC,将get_dummies
与duplicated
一起使用
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)
我会做很多事情。
pandas.Series.str.split
以逗号分隔apply(frozenset)
获取可散列集,以便我可以使用duplicated
pandas.Series.duplicated
与keep='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()
))