删除pandas.Dataframe中重复列的快速方法

时间:2015-08-17 00:24:46

标签: python pandas

所以使用

df_ab = pd.concat([df_a, df_b], axis=1, join='inner')

我得到的Dataframe看起来像这样:

    A    A    B    B
0   5    5   10   10
1   6    6   19   19

我想删除多个列:

    A     B
0   5    10
1   6    19

因为df_a和df_b是同一个Dataframe的子集,所以我知道如果列名相同,所有行都具有相同的值。我有一个有效的解决方案:

df_ab = df_ab.T.drop_duplicates().T

但我有很多行,所以这一行非常慢。有人有更快的解决方案吗?我更喜欢一种不需要明确知道列名的解决方案。

4 个答案:

答案 0 :(得分:12)

最简单的方法是:

df = df.loc[:,~df.columns.duplicated()]

一行代码可以改变一切

答案 1 :(得分:3)

使用pd.merge代替pd.concat,或许你最好完全避免这个问题:

df_ab = pd.merge(df_a, df_b, how='inner')

这会在所有共享的列上合并df_adf_b

答案 2 :(得分:3)

您可以使用np.unique获取唯一列的索引,然后使用.iloc

>>> df
   A  A   B   B
0  5  5  10  10
1  6  6  19  19
>>> _, i = np.unique(df.columns, return_index=True)
>>> df.iloc[:, i]
   A   B
0  5  10
1  6  19

答案 3 :(得分:0)

尽管它看起来很愚蠢,但对我而言,最简单的方法是转置数据帧,使用drop_duplicates,然后再次进行转置。显然,这是假定除了标头名称之外,它还会复制数据本身:

df.T.drop_duplicates().T