熊猫在某些列中相对于其他列删除具有重复项的行

海盗

考虑数据框 df

data = [
    ['a', 'b', 'c', 'd'],
    ['a', 'b', 'e', 'f'],
    ['g', 'h', 'i', 'j'],
    ['k', 'l', 'm', 'n'],
    ['m', 'n', 'o', 'p'],
    ['q', 'r', 's', 't'],
    ['u', 'v', 'w', 'x'],
    ['y', 'z', 'q', 'r'],
]

cols = pd.MultiIndex.from_product([list('AB'), list('XY')])

df = pd.DataFrame(data, columns=cols)

df

在此处输入图片说明

我想将的所有行df.A与的所有行进行比较df.B并删除具有匹配项的行。希望丢弃具有内符合项目行df.Adf.B自己。

视觉效果

在此处输入图片说明

  • 不理会行[0, 1]
  • [3, 4]由于'm', 'n'匹配而删除行
  • [5, 7]由于'q', 'r'匹配而删除行

结果应该看起来像

df.loc[[0, 1, 2, 6]]

在此处输入图片说明


我试着stackdrop_duplicates

df.stack(0).drop_duplicates(keep=False) \
    .unstack().dropna() \
    .swaplevel(0, 1, 1).sort_index(1)

在此处输入图片说明

但这会在相同的子列中捕获重复项,这不是我想要的。

最大容量

试试这个:

In [248]: df[~(df.A.isin(df.B.to_dict('list')).all(1) | df.B.isin(df.A.to_dict('list')).all(1))]
Out[248]:
   A     B
   X  Y  X  Y
0  a  b  c  d
1  a  b  e  f
2  g  h  i  j
6  u  v  w  x

说明:

In [249]: df.A.isin(df.B.to_dict('list'))
Out[249]:
       X      Y
0  False  False
1  False  False
2  False  False
3  False  False
4   True   True
5   True   True
6  False  False
7  False  False

In [250]: df.A.isin(df.B.to_dict('list')).all(1)
Out[250]:
0    False
1    False
2    False
3    False
4     True
5     True
6    False
7    False
dtype: bool

In [251]: df.B.isin(df.A.to_dict('list'))
Out[251]:
       X      Y
0  False  False
1  False  False
2  False  False
3   True   True
4  False  False
5  False  False
6  False  False
7   True   True

In [252]: df.B.isin(df.A.to_dict('list')).all(1)
Out[252]:
0    False
1    False
2    False
3     True
4    False
5    False
6    False
7     True
dtype: bool

结合两者:

In [253]: df.A.isin(df.B.to_dict('list')).all(1) | df.B.isin(df.A.to_dict('list')).all(1)
Out[253]:
0    False
1    False
2    False
3     True
4     True
5     True
6    False
7     True
dtype: bool

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel 列 B 有重复项,对于 B 中的每组重复项,在 A 列中只有 1 行具有值,返回某些内容以识别匹配项

相对于其他行过滤具有特定特征的行

熊猫删除对一列具有不同价值的行,但对所有其他列重复

相对于其他列中的值更改DataFrame中的列

找到一列中的最大值相对于其他列

相对于其他两个列值替换列中的值

删除一列中具有重复值但其他列中具有不同值的行

熊猫删除在其他列中具有相似价值的行

如何相对于 R 中的所有其余列对某些列运行测试?

删除任何其他相邻列中具有重复值的行

如果特定的其他列不为空,如何删除重复项但保留行(熊猫)

设置表格单元格相对于列中其他单元格的宽度

熊猫,删除重复项但合并某些列

当其他列中的值相同时,熊猫会删除重复项

删除两列具有相同值的重复项 - 熊猫

熊猫,根据其他列的值删除重复的行

删除一列动态数据中具有重复项的行的重复项

根据其他列中的值删除重复项

配置单元相对于同一表中其他数组列的排序数组列

熊猫-从具有多个值的列中删除重复项,计数项目

Django queryset相对于其他列获取不同的列值

根据其他行中的重复项创建新列

如何相对于其他数据帧识别数据帧中的唯一列?

熊猫数据框,删除某些列中具有相同值的两行之间的行

熊猫:删除特定列中的重复项

删除熊猫所有列中具有相同值的重复行

如何相对于其他数据框列顺序对 r 数据框的列名进行排序

Android SQLite 获得相对于其他列的最大值

MYSQL从具有两列的表中删除重复项