我有一个示例数据框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
答案 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