2015-10-13 2 views
1

У меня есть следующие DataFrame:Отбрасывания строки в питоне панд

 2010-01-03 2010-01-04 2010-01-05 2010-01-06 2010-01-07 
1560 0.002624 0.004992 -0.011085 -0.007508 -0.007508 
14  0.000000 -0.000978 -0.016960 -0.016960 -0.009106 
2920 0.000000 0.018150 0.018150 0.002648 0.025379 
1502 0.000000 0.018150 0.011648 0.005963 0.005963 
78  0.000000 0.018150 0.014873 0.014873 0.007564 

У меня есть список индексов, соответствующих строки, которые я хочу отказаться от моего DataFrame. Для простоты предположим, что мой список равен idx_to_drop = [1560,1502], которые соответствуют 1-й строке и 4-й строке в дарафраме выше.

Я попытался запустить df2 = df.drop(df.index[idx_to_drop]), но это ожидает номера строк, а не значение индекса .ix(). У меня есть еще много строк и много столбцов, и получение номеров строк с помощью функции where() занимает некоторое время.

Как я могу сбрасывать ряды, чье соответствие .ix()?

+0

'df [~ df.index.isin ([1560, 1502])]' это работает для вас? –

+0

@BrianPendleton: Это не – David

+0

@BrianPendleton: О, да, это так. Отлично. Спасибо! Хотите опубликовать его в качестве ответа, чтобы я мог отметить его правильно? – David

ответ

4

Я бы занялся этим, разбив проблему на две части. Маска, что вы ищете, затем выберите субверсию.

Короткий ответ:

df[~df.index.isin([1560, 1502])] 

Объяснение с работоспособными, например, с помощью isin:

import pandas as pd 
df = pd.DataFrame({'index': [1, 2, 3, 1500, 1501], 
        'vals': [1, 2, 3, 4, 5]}).set_index('index') 

bad_rows = [1500, 1501] 
mask = df.index.isin(bad_rows) 
print mask 
[False False False True True] 

df[mask] 

     vals 
index  
1500  4 
1501  5 

print ~mask 
[ True True True False False] 

df[~mask] 

     vals 
index  
1   1 
2   2 
3   3 

Вы можете видеть, что мы определили два плохих строки, то мы хотим, чтобы выбрать все строки это не плохие. Наша маска, если для плохих строк и всех других строк будет ничего, что не является маской (~mask)

+0

Отмеченные как правильные в течение 7 минут – David

+0

Не могли бы вы дать ответ более подробно с объяснениями, ссылками на api и т. Д. Коды ответов только нахмурились, спасибо. – EdChum

+0

@EdChum добавил более подробную информацию и ссылку на индексирование isin/boolean. Спасибо –

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