所以使用
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
但我有很多行,所以这一行非常慢。有人有更快的解决方案吗?我更喜欢一种不需要明确知道列名的解决方案。
答案 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_a
和df_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