2015-11-30 2 views
2

Я пытаюсь создать программу, которая будет удалять столбец в dataFrame панда, если сумма столбца составляет менее 10.Удалить столбец в панд DataFrame, если его сумма меньше х

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

df = pandas.DataFrame(AllData) 
sum = df.sum(axis=1) 
badCols = list() 
for index in range(len(sum)): 
    if sum[index] < 10: 
     badCols.append(index) 
df = df.drop(df.columns[badCols], axis=1) 

В моем подходе я создаю список индексов столбцов, сумма которых меньше 10, после чего я удаляю этот список. Есть ли лучший способ сделать это?

ответ

3

Вы можете выполнить свою задачу, используя однострочный лайнер, используя список и iteritems, чтобы идентифицировать все столбцы, соответствующие вашим критериям.

df = pd.DataFrame({'a': [1, 10], 'b': [1, 1], 'c': [20, 30]}) 
>>> df 
    a b c 
0 1 1 20 
1 10 1 30 

df.drop([col for col, val in df.sum().iteritems() if val < 10], axis=1, inplace=True) 

>>> df 
    a c 
0 1 20 
1 10 30 
5

Вы можете вызвать sum для создания Series, что дает сумму каждому столбца, а затем использовать его для создания булевой маски против вашего массива столбцов и использовать это для фильтрации ФРА. Код генерации DF заимствованный от @Alexander:

In [2]: 
df = pd.DataFrame({'a': [1, 10], 'b': [1, 1], 'c': [20, 30]}) 
df 

Out[2]: 
    a b c 
0 1 1 20 
1 10 1 30 

In [3]:  
df.sum() 

Out[3]: 
a 11 
b  2 
c 50 
dtype: int64 

In [6]: 
df[df.columns[df.sum()>10]] 

Out[6]: 
    a c 
0 1 20 
1 10 30 
Смежные вопросы