сумма значений столбцов, начинающихся с той же строки в панде
У меня есть датафрейм с около 100 столбцами, который выглядит как
Id Economics-1 English-107 English-2 History-3 Economics-zz Economics-2 \
0 56 1 1 0 1 0 0
1 11 0 0 0 0 1 0
2 6 0 0 1 0 0 1
3 43 0 0 0 1 0 1
4 14 0 1 0 0 1 0
Histo Economics-51 Literature-re Literatureu4
0 1 0 1 0
1 0 0 0 1
2 0 0 0 0
3 0 1 1 0
4 1 0 0 0
поэтому моя цель состоит в том, чтобы оставить только больше глобальных категорий: только английский, история, литература и записать в эти рамки данных сумму значений его компонентов, например, для английского: английский-107, английский-2
Id Economics English History Literature
0 56 1 1 2 1
1 11 1 0 0 1
2 6 0 1 1 0
3 43 2 0 1 1
4 14 0 1 1 0
так что для тех предложений, я верен эти два метода
first method:
df=pd.read_csv(file_path, sep='\t')
df['History']=df.loc[df[df.columns[pd.Series(df.columns).str.startswith('History')]].sum(axes=1)]
второй метод:
df=pd.read_csv(file_path, sep='\t')
filter_col = [col for col in list(df) if col.startswith('History')]
df['History']=0 #initialize value, otherwise throws KeyError
for c in df[filter_col]:
df['History']=df[filter_col].sum(axes=1)
print df['History', df[filter_col]]
, но оба дают мне ошибку
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
Не могли бы вы предложить, как я могу отладить эту ошибку или, возможно, другое решение, для моей проблемы. Пожалуйста, обратите внимание, что у меня есть большой фрейм данных с около 100 столбцами и 400000 строк, поэтому я ищу действительно оптимизированное решение, как сloc
в пандах