#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