Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于具有列表值的多列在dataframe中删除重复行_Python_Pandas_List_Dataframe_Drop Duplicates - Fatal编程技术网

Python 基于具有列表值的多列在dataframe中删除重复行

Python 基于具有列表值的多列在dataframe中删除重复行,python,pandas,list,dataframe,drop-duplicates,Python,Pandas,List,Dataframe,Drop Duplicates,我的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

我的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,pkh,sws]    [aqs,zxc,asd]   [plm,okn,ijb]
4     27         [asw,bxs,mdh]    [wka,kdy,kaw]   [pqm,lsc,yhb]
期望输出:

ID    col1            col2            col3            col4
2     47         [qaz,wsx,edc]    [aws,rfc,tgb]   [rty,wer,dfg]
4     27         [asw,bxs,mdh]    [wka,kdy,kaw]   [pqm,lsc,yhb]

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

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

  • 步骤1:使用将包含列表的每个列转换为字符串类型 astype(str)
  • 第2步:使用drop_副本,将列作为字符串。自从你 要删除所有重复项,请设置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,['kjd','pkh','sws'],['aqs','zxc','asd'],['plm','okn','ijb']],
    [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', 'col3s','col4s'],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, pkh, sws]  [aqs, zxc, asd]  [plm, okn, ijb]
3    27  [asw, bxs, mdh]  [wka, kdy, kaw]  [pqm, lsc, yhb]
删除重复项后的数据帧:

   col1             col2             col3             col4
1    47  [qaz, wsx, edc]  [aws, rfc, tgb]  [rty, wer, dfg]
3    27  [asw, bxs, mdh]  [wka, kdy, kaw]  [pqm, lsc, yhb]

不,我已经试过了。因为我在列中列出了值,所以它会产生错误
drop\u duplicates
与您给我的示例一致。如果你仍然有问题,只需编辑你的帖子,提供更多关于你在
删除重复项
中遇到的问题的详细信息。我认为作为答案的帖子并不是这个问题的真实答案,而是这篇帖子的答案:元素在重复列表中的顺序会改变吗?@HooriM。这个答案将单列转换为元组,但我的问题有三列,其中有列表值