2013-11-14 4 views
7

Предположим, у меня есть DataFrame так:Панды удалить столбец по индексу

>>> df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['a','b','b']) 
>>> df 
    a b b 
0 1 2 3 
1 4 5 6 
2 7 8 9 

И я хочу, чтобы удалить вторую 'b' колонку. Если я просто использовать del заявления, это будет удалить оба 'b' колонок:

>>> del df['b'] 
>>> df 
    a 
0 1 
1 4 
2 7 

можно выбрать столбец по индексу с .iloc[] и переназначить DataFrame, но как я могу удалить только второй столбец 'b', например, с помощью индекса?

+0

Это интересно. Переназначение звучит соответствующим образом. Думая дважды, вы знаете, что хотите удалить второй 'b', не основанный на именах столбцов, поскольку у вас есть дубликаты, но действительно по индексу. Таким образом, ваш алгоритм каким-то образом использует этот индекс. Так почему бы просто не изменить столбцы на индекс, основанный в этом случае? – Boud

+1

@Boud хорошее предложение, на самом деле я мог бы переименовать все столбцы, которые я хочу удалить, а затем удалить по имени, попробует, когда доберется до дома –

+0

afaik, 'del df ['b']' переводит команду block manager для удаления относительных элементы из всех блоков, т.е. примерно равны переназначению 'df = df.iloc [:,: 2]' – alko

ответ

5
df = df.drop(['b'], axis=1).join(df['b'].ix[:, 0:1]) 

>>> df 
    a b 
0 1 2 
1 4 5 
2 7 8 

Или просто для этого случая

df = df.ix[:, 0:2] 

Но я думаю, что у него есть другие более эффективные способы.

+1

Это лучший способ сохранить первый экземпляр дублирующего столбца, который я еще нашел! – Carl

Смежные вопросы