2016-09-07 7 views
2

у меня есть термин х матрица документа в панд (сделанный из CSV) вида:Отображение столбцов в панд

cheese, milk, bread, butter 
0,2,1,0 
1,1,0,0 
1,1,1,1 
0,1,0,1 

Так что, если я говорю «дать мне колонки с индексом 1 и 2, где значения данной строки равны> 0 '.

Я хочу закончить с этим:

cheese, milk, 
[omitted] 
1,1 
1,1 
[omitted] 

Таким образом, я могу суммировать number of rows/number of documents и прийти к частым НИКАКИХ гарантий т.е. (cheese, milk) --[2/4 support]

Я попробовал этот подход, как показано на отдельная стопорная резьба:

fil_df.select([fil_df.columns[1] > 0 and fil_df.columns[2] > 0], [fil_df.columns[1], fil_df.columns[2]]) 

Но это не работает для меня печально. Я получаю сообщение об ошибке:

TypeError: unorderable types: str() > int()

Что я не знаю, как это исправить, как я не могу сделать клетки моего Роу быть integers, когда я делаю dataframe из CSV.

+1

fil_df.columns [1] возвращает имя колонные не сам колонные. Следовательно, TypeError – Skirrebattie

+0

Также python основан на нуле, поэтому, если вам нужны первые два столбца, вы должны использовать 0 и 1 как индекс – Skirrebattie

ответ

1

Вы можете использовать iloc с boolean indexing:

#get 1. and 2. columns 
subset = df.iloc[:, [0,1]] 
print (subset) 
    cheese milk 
0  0  2 
1  1  1 
2  1  1 
3  0  1 

#mask 
print ((subset > 0)) 
    cheese milk 
0 False True 
1 True True 
2 True True 
3 False True 

#get all values where True by rows 
print ((subset > 0).all(1)) 
0 False 
1  True 
2  True 
3 False 
dtype: bool 

#get first and second columns names 
print (df.columns[[0,1]]) 
Index(['cheese', 'milk'], dtype='object') 

print (df.ix[(subset > 0).all(1), df.columns[[0,1]]]) 
    cheese milk 
1  1  1 
2  1  1 
Смежные вопросы