2015-03-24 5 views
0

Я хочу сохранить столбцы с «n» или более значениями. Например:Pandas index column by boolean

> df = pd.DataFrame({'a': [1,2,3], 'b': [1,None,4]}) 

    a b 
0 1 1 
1 2 NaN 
2 3 4 

3 rows × 2 columns 

> df[df.count()==3] 
IndexingError: Unalignable boolean Series key provided 

> df[:,df.count()==3] 
TypeError: unhashable type: 'slice' 

> df[[k for (k,v) in (df.count()==3).items() if v]] 

    a 
0 1 
1 2 
2 3 

Это самый лучший способ сделать это? Это кажется смешным.

ответ

2

Вы можете использовать распознавание условного списка для генерации столбцов, которые превышают ваш порог (например, 3). Затем просто выберите те столбцы из кадра данных:

# Create sample DataFrame 
df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 
        'b': [1, None, 4, None, 2], 
        'c': [5, 4, 3, 2, None]}) 

>>> df_new = df[[col for col in df if df[col].count() > 3]] 
Out[82]: 
    a c 
0 1 5 
1 2 4 
2 3 3 
3 4 2 
4 5 NaN 
1

если вы хотите сохранить столбцы, которые имеют значение «N» или больше. В моем примере я рассматриваю п значение в 4

df = pd.DataFrame({'a': [1,2,3,4,6], 'b': [1,None,4,5,7],'c': [1,2,3,5,8]}) 
print df 

    a b c 
0 1 1 1 
1 2 NaN 2 
2 3 4 3 
3 4 5 5 
4 6 7 8 

print df[[i for i in xrange(0,len(df.columns)) if len(df.iloc[:,i]) - df.isnull().sum()[i] >4]] 


    a c 
0 1 1 
1 2 2 
2 3 3 
3 4 5 
4 6 8 
2

count Используйте для создания булева индекса и использовать в качестве маски для столбцов:

In [10]: 

df[df.columns[df.count() > 2]] 


Out[10]: 
    a 
0 1 
1 2 
2 3