如何根据pandas中的列名删除重复的列数据

X.Z*_*X.Z 11 pandas

假设我有一个如下表

    A   B   C   B
0   0   1   2   3
1   4   5   6   7
Run Code Online (Sandbox Code Playgroud)

我想删除列B.我尝试使用drop_duplicate,但它似乎只能基于重复数据而不是标题.希望有人知道如何做到这一点

谢谢

jez*_*ael 25

使用Index.duplicatedlocilocboolean indexing:

print (~df.columns.duplicated())
[ True  True  True False]

df = df.loc[:, ~df.columns.duplicated()]
print (df)
   A  B  C
0  0  1  2
1  4  5  6
Run Code Online (Sandbox Code Playgroud)
df = df.iloc[:, ~df.columns.duplicated()]
print (df)
   A  B  C
0  0  1  2
1  4  5  6
Run Code Online (Sandbox Code Playgroud)

时间:

np.random.seed(123)
cols = ['A','B','C','B']
#[1000 rows x 30 columns]
df = pd.DataFrame(np.random.randint(10, size=(1000,30)),columns = np.random.choice(cols, 30))
print (df)

In [115]: %timeit (df.groupby(level=0, axis=1).first())
1000 loops, best of 3: 1.48 ms per loop

In [116]: %timeit (df.groupby(level=0, axis=1).mean())
1000 loops, best of 3: 1.58 ms per loop

In [117]: %timeit (df.iloc[:, ~df.columns.duplicated()])
1000 loops, best of 3: 338 µs per loop

In [118]: %timeit (df.loc[:, ~df.columns.duplicated()])
1000 loops, best of 3: 346 µs per loop
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

  • 我肯定和你的一起去.它具有直观意义.你立即投了我的票.如果你想做其他事情,我的代码字符会略少,而且会更灵活一些.有用......但我更喜欢你的. (2认同)

piR*_*red 5

您可以groupby
使用axis=1level=0参数来指定我们按列分组。然后使用该first方法获取由唯一列名定义的每个组中的第一列。

df.groupby(level=0, axis=1).first()

   A  B  C
0  0  1  2
1  4  5  6
Run Code Online (Sandbox Code Playgroud)

我们也可以使用 last

df.groupby(level=0, axis=1).last()

   A  B  C
0  0  3  2
1  4  7  6
Run Code Online (Sandbox Code Playgroud)

或者 mean

df.groupby(level=0, axis=1).mean()

   A  B  C
0  0  2  2
1  4  6  6
Run Code Online (Sandbox Code Playgroud)