如何删除数据框的列中的一个特定的重复命名列?

时间:2019-08-08 09:37:03

标签: pandas

我有一个示例数据框df,其列为:

  a b c a a b b c c 
0 2 2 1 2 2 1 1 2 2
1 2 2 2 2 2 1 2 1 2
. . .
. . . 

我想删除仅以“ a”命名的重复列,并保持其他相同 预期的o / p为:

  a b c b b c c 
0 2 2 1 1 1 2 2
1 2 2 2 1 2 1 2

2 个答案:

答案 0 :(得分:3)

这是删除列的所有重复项的通用解决方案,无论这些列在数据框中的位置如何以及这些列的内容是什么。
首先,我们获取给定列名称的所有列索引,然后删除第一个出现的列索引。然后我们从所有索引中“减去”这些索引,并返回其余的列:

to_drop = 'a'
dup = [i for i,v in enumerate(df.columns) if v==to_drop][1:]
df = df.iloc[:, list(set(range(len(df.columns))) - set(dup))]

结果:

   a  b  c  b  b  c  c
0  2  2  1  1  1  2  2
1  2  2  2  1  2  1  2

答案 1 :(得分:2)

df = df.T.reset_index().drop_duplicates().set_index('index').T
del df.columns.name
  

Exp

由于列a仅具有重复值,因此我们可以简单地使用重置索引进行转置

df.T.reset_index()


  index  0  1
0     a  2  2
1     b  2  2
2     c  1  2
3     b  1  1
4     b  1  2
5     c  2  1
6     c  2  2

在df上方应用drop_duplicate,只会删除重复对象。在有多于一列具有重复值的列的情况下,它也可以达到目的

输出

   a  b  c  b  b  c  c
0  2  2  1  1  1  2  2
1  2  2  2  1  2  1  2