如何在Python中删除具有相同列表值的行?



数据框架:

mat = {'f1': ['A aaa', 'B sss', 'C ddd', 'B bbb'], 'f2': ['F eee', 'B bbb', 'A aaa', 'B sss']}
dict = {'A': ['A aaa'], 'B': ['B bbb', 'B sss'], 'C': ['C ddd'], 'F': ['F eee', 'F aaa']}
df = pd.DataFrame(mat)

我们可以看到键'B'在字典中有一个列表作为它的值,其中列表由两个元素组成。我需要做的是删除同一个列表中值为f1和f2的行。例如,第二行和第四行。

您可以重新编写字典以从值映射键,然后使用groupby来标识具有所有唯一值的行:

dic = {'A': ['A aaa'], 'B': ['B bbb', 'B sss'],
'C': ['C ddd'], 'F': ['F eee', 'F aaa']}
dic2 = {v: k for k,l in dic.items() for v in l}
# {'A aaa': 'A', 'B bbb': 'B', 'B sss': 'B', 'C ddd': 'C',
#  'F eee': 'F', 'F aaa': 'F'}
out = df[df.stack().map(dic2).groupby(level=0).nunique().ne(1)]

替代:

df2 = df.stack().map(dic2).unstack()
out = df[df2.ne(df2.iloc[:, 0], axis=0).any(1)]

输出:

f1     f2
0  A aaa  F eee
2  C ddd  A aaa

相关内容

  • 没有找到相关文章

最新更新