我有一个如下数据框:
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
在行单元格中循环查找重复项还是其他方法?
答案 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_())