Pandas: выбор строк по списку

#pandas #sum

#pandas #сумма

Вопрос:

Я попробовал следующий код для выбора столбцов из фрейма данных. Мой фрейм данных имеет около 50 значений. В конце я хочу создать сумму выбранных столбцов, создать новый столбец с этими значениями суммы, а затем удалить выбранные столбцы.

Я начал с

 columns_selected = ['A','B','C','D','E']
df = df[df.column.isin(columns_selected)]
 

но он сказал AttributeError: объект ‘DataFrame’ не имеет атрибута ‘column’

Что касается суммы: поскольку я не хочу писать для суммы

 df['sum_1'] = df['A'] df['B'] df['C'] df['D'] df['E']
 

Я также подумал, что что-то вроде

  df['sum_1'] = df[columns_selected].sum(axis=1)
 

было бы удобнее.

Ответ №1:

Вы хотите df[columns_selected] выбрать df по списку столбцов

затем вы можете сделать df['sum_1'] = df[columns_selected].sum(axis=1)

Чтобы отфильтровать df только для интересующих столбцов, передайте список столбцов, df = df[columns_selected] обратите внимание, что это распространенная ошибка только для списка строк: df = df['a','b','c'] что вызовет a KeyError .

Обратите внимание, что в вашей первоначальной попытке была опечатка:

 df = df.loc[:,df.columns.isin(columns_selected)]
 

Вышеупомянутое сработало бы, во-первых, вам columns это не нужно column , во-вторых, вы можете использовать логическую маску в качестве маски для столбцов, передав loc или ix в качестве аргумента выбора столбца:

 In [49]:
df = pd.DataFrame(np.random.randn(5,5), columns=list('abcde'))
df

Out[49]:
          a         b         c         d         e
0 -0.778207  0.480142  0.537778 -1.889803 -0.851594
1  2.095032  1.121238  1.076626 -0.476918 -0.282883
2  0.974032  0.595543 -0.628023  0.491030  0.171819
3  0.983545 -0.870126  1.100803  0.139678  0.919193
4 -1.854717 -2.151808  1.124028  0.581945 -0.412732

In [50]:
cols = ['a','b','c']
df.ix[:, df.columns.isin(cols)]

Out[50]:
          a         b         c
0 -0.778207  0.480142  0.537778
1  2.095032  1.121238  1.076626
2  0.974032  0.595543 -0.628023
3  0.983545 -0.870126  1.100803
4 -1.854717 -2.151808  1.124028
 

Комментарии:

1. Хорошо, первая часть работает. Как насчет удаления columns_selected после этого?

2. Вы имеете в виду просто df = df[columns_selected] ?

3. Да, после создания столбца .sum(axis= 1) я хочу удалить все columns_selected