2016-11-07 4 views
5

У меня есть DataFrame с колонками [A, B, C, D, E, F, G, H].Индекс подмножества от Pandas DataFrame

Индекс был сделан с колоннами [D, G, H]:

>>> print(dgh_columns) 
Index(['D', 'G', 'H'], dtype='object') 

Как я могу получить оригинальный DataFrame без колонны D, G, H?

Есть ли операция подмножества индексов?

В идеале, это было бы:

df[df.index - dgh_columns] 

Но это не похоже на работу

ответ

5

Я думаю, что вы можете использовать Index.difference:

df[df.columns.difference(dgh_columns)] 

Пример:

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[7,8,9], 
        'F':[1,3,5], 
        'G':[5,3,6], 
        'H':[7,4,3]}) 

print (df) 
    A B C D E F G H 
0 1 4 7 1 7 1 5 7 
1 2 5 8 3 8 3 3 4 
2 3 6 9 5 9 5 6 3 

dgh_columns = pd.Index(['D', 'G', 'H']) 
print (df[df.columns.difference(dgh_columns)]) 
    A B C E F 
0 1 4 7 7 1 
1 2 5 8 8 3 
2 3 6 9 9 5 

раствор Numpy с numpy.setxor1d или numpy.setdiff1d:

dgh_columns = pd.Index(['D', 'G', 'H']) 
print (df[np.setxor1d(df.columns, dgh_columns)]) 
    A B C E F 
0 1 4 7 7 1 
1 2 5 8 8 3 
2 3 6 9 9 5 

dgh_columns = pd.Index(['D', 'G', 'H']) 
print (df[np.setdiff1d(df.columns, dgh_columns)]) 
    A B C E F 
0 1 4 7 7 1 
1 2 5 8 8 3 
2 3 6 9 9 5 
+0

Hum. Имеет смысл, однако я получаю 'IndexError: индексы вне границ' – Jivan

+0

Пожалуйста, проверьте мой пример, я думаю, что я опечатывал раньше. – jezrael

+0

Хорошо, это потому, что я выполнил ввод/удаление столбцов после инициализации 'dgh_columns' – Jivan

2

использование drop

df.drop(list('DGH'), axis=1) 

df = pd.DataFrame({'A':[1,2,3], 
        'B':[4,5,6], 
        'C':[7,8,9], 
        'D':[1,3,5], 
        'E':[7,8,9], 
        'F':[1,3,5], 
        'G':[5,3,6], 
        'H':[7,4,3]}) 

df.drop(list('DGH'), 1) 

enter image description here

+0

Вау, на самом деле это то, что я искал ... – Jivan

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