在一个数据框中去除重复项,并保留具有特定列值的项。

3
我有一个数据框 df:
columnA columnB columnC columnD columnE
A        B         10      C       C
A        B         10      D       A
B        C         20      A       A
B        A         20      D       A
B        A         20      D       C

我想在我的情况下,如果有重复的条目 columnA, columnB, columnC ,删除重复项。
columnA columnB columnC columnD columnE
A        B         10      C       C
A        B         10      D       A
B        A         20      D       A
B        A         20      D       C

如何保留其中一行重复数据,其中columnE等于C? 以便完整数据框的输出为:
columnA columnB columnC columnD columnE
A        B         10      C       C
B        C         20      A       A
B        A         20      D       C
1个回答

3
你可以使用 DataFrame.sort_values 来优先排序 C 值,然后再使用 DataFrame.drop_duplicates 或原始顺序添加 DataFrame.sort_index
out = (df.sort_values('columnE', key=lambda x: x.ne('C'))
         .drop_duplicates(['columnA','columnB','columnC'])
         .sort_index())
print (out)
  columnA columnB  columnC columnD columnE
0       A       B       10       C       C
2       B       C       20       A       A
4       B       A       20       D       C

或者使用 DataFrameGroupBy.idxmax 获取偏好 C 的索引,然后使用 DataFrame.loc 选择行并使用 Series.sort_values 进行原始排序:

idx = df['columnE'].eq('C').groupby([df['columnA'],df['columnB'],df['columnC']]).idxmax()
out = df.loc[idx.sort_values()]
print (out)
  columnA columnB  columnC columnD columnE
0       A       B       10       C       C
2       B       C       20       A       A
4       B       A       20       D       C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接