基于具有列表值的多列删除数据框中的重复行

问题描述

我有包含多列的 DataFrame,并且很少有列包含列表值。通过只考虑包含列表值的列,必须删除重复的行。

当前数据框:

ID    col1            col2            col3            col4
1     52         [kjd,pkh,sws]    [aqs,zxc,asd]   [plm,okn,ijb]
2     47         [qaz,wsx,edc]    [aws,rfc,tgb]   [rty,wer,dfg]
3     85         [kjd,ijb]
4     27         [asw,bxs,mdh]    [wka,kdy,kaw]   [pqm,lsc,yhb]

所需的输出

ID    col1            col2            col3            col4
2     47         [qaz,dfg]
4     27         [asw,yhb]

我尝试将其转换为元组并应用 df.drop_duplicates() 但出现多个错误

解决方法

您可以将带有列表的每一列转换为 str,然后删除重复项。

  • 步骤 1:使用以下方法将具有列表的每一列转换为字符串类型 astype(str)。
  • 第 2 步:使用 drop_duplicates 将列作为字符串。自从你 想要删除所有重复项,请设置 keep=False。
  • 第 3 步:删除临时创建的 astype(str) 列,因为您不再 需要他们。

完整代码如下:

c = ['col1','col2','col3','col4']
d =[[52,['kjd','pkh','sws'],['aqs','zxc','asd'],['plm','okn','ijb']],[47,['qaz','wsx','edc'],['aws','rfc','tgb'],['rty','wer','dfg']],[85,[27,['asw','bxs','mdh'],['wka','kdy','kaw'],['pqm','lsc','yhb']]]

import pandas as pd
df = pd.DataFrame(d,columns=c)
print(df)

df['col2s'] = df['col2'].astype(str)
df['col3s'] = df['col3'].astype(str)
df['col4s'] = df['col4'].astype(str)

df.drop_duplicates(subset=['col2s','col3s','col4s'],keep=False,inplace=True)
df.drop(['col2s',axis=1,inplace=True)
print (df)

输出结果为:

原始数据帧:

   col1             col2             col3             col4
0    52  [kjd,pkh,sws]  [aqs,zxc,asd]  [plm,okn,ijb]
1    47  [qaz,wsx,edc]  [aws,rfc,tgb]  [rty,wer,dfg]
2    85  [kjd,ijb]
3    27  [asw,bxs,mdh]  [wka,kdy,kaw]  [pqm,lsc,yhb]

删除重复项后的数据帧:

   col1             col2             col3             col4
1    47  [qaz,dfg]
3    27  [asw,yhb]