保留两行,同时删除两列中的重复值

时间:2020-02-25 12:08:36

标签: python pandas pandas-groupby

我有一个如下数据框:

for child in (parent.left, parent.right):

如果下一行相同列中的值等于上一行,则需要从col1 col2 col3 col4 col5 A 1 ABC XYZ ZZZ A 1 XYZ YYY KKK B 2 JJJ KKK LLL B 2 OOO ASD FGH C 3 TFG KLO PLJ col1中删除这些值。另外,我需要在其他列中保留同一行的值。

我尝试使用col2,但它删除了与重复值有关的整行。 df.drop_duplicates(subset=['col1','col2'])没有series.drop_duplicates()参数,可以删除考虑多列的重复项。我还比较了使用subset似乎不起作用的情况。

结果df:

shift(-1)

我应该使用col1 col2 col3 col4 col5 A 1 ABC XYZ ZZZ XYZ YYY KKK B 2 JJJ KKK LLL OOO ASD FGH C 3 TFG KLO PLJ 在行单元格中循环查找重复项还是其他方法?

1 个答案:

答案 0 :(得分:1)

DataFrame.duplicated中按掩码使用DataFrame.loc和设置值:

import sys
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QTableView, QApplication, QWidget, QVBoxLayout


class MyWidget(QWidget):

    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)

        model = FirstModel(4, 2)
        model.setData(model.index(0, 0), "a", Qt.EditRole)
        model.setData(model.index(0, 1), 2, Qt.EditRole)
        model.setData(model.index(1, 0), "b", Qt.EditRole)
        model.setData(model.index(1, 1), 4, Qt.EditRole)
        model.setData(model.index(2, 0), "c", Qt.EditRole)
        model.setData(model.index(2, 1), 6, Qt.EditRole)
        model.setData(model.index(3, 0), "d", Qt.EditRole)
        model.setData(model.index(3, 1), 8, Qt.EditRole)

        tableview = QTableView()
        tableview.setModel(model)

        layout = QVBoxLayout()
        layout.addWidget(tableview)
        self.setLayout(layout)


class SecondModel(QStandardItemModel):

    def data(self, index, role=Qt.DisplayRole):
        super().data(index, role)

        # set Alignment for column 1
        if role == Qt.TextAlignmentRole:
            if index.column() == 1:
                return Qt.AlignHCenter | Qt.AlignVCenter

        return QStandardItemModel.data(self, index, role)


class FirstModel(SecondModel):

    def data(self, index, role=Qt.DisplayRole):
        super().data(index, role)

        # set Alignment for column 0
        if role == Qt.TextAlignmentRole:
            if index.column() == 0:
                return Qt.AlignHCenter | Qt.AlignVCenter

        return QStandardItemModel.data(self, index, role)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    table_view = MyWidget()
    table_view.show()

    sys.exit(app.exec_())