, когда у меня такая же проблема. если вы используете файлы классов библиотеки и записываете его в файлы манифеста android, напишите его так же, как и затем удалите файлы манифеста проектов библиотеки этой части >> тогда он будет работать абсолютно.
Я предлагаю вам сделать что-то другое, это выполнить транспонирование, группу по префиксу строк (ваши исходные столбцы), sum и транспонировать снова.
Рассмотрим следующее:
df = pd.DataFrame({
'a_a': [1, 2, 3, 4],
'a_b': [2, 3, 4, 5],
'b_a': [1, 2, 3, 4],
'b_b': [2, 3, 4, 5],
})
Теперь
[s.split('_')[0] for s in df.T.index.values]
является префиксом столбцов. Таким образом,
>>> df.T.groupby([s.split('_')[0] for s in df.T.index.values]).sum().T
a b
0 3 3
1 5 5
2 7 7
3 9 9
делает то, что вы хотите.
В вашем случае обязательно разделите, используя символ '-'
.
Использование блестящей идеи DSM:
from __future__ import print_function
import pandas as pd
categories = set(['Economics', 'English', 'Histo', 'Literature'])
def correct_categories(cols):
return [cat for col in cols for cat in categories if col.startswith(cat)]
df = pd.read_csv('data.csv', sep=r'\s+', index_col='Id')
#print(df)
print(df.groupby(correct_categories(df.columns),axis=1).sum())
Выход:
Economics English Histo Literature
Id
56 1 1 2 1
11 1 0 0 1
6 1 1 0 0
43 2 0 1 1
14 1 1 1 0
Вот еще одна версия, которая заботится о «Histo / History» проблематичной ..
from __future__ import print_function
import pandas as pd
#categories = set(['Economics', 'English', 'Histo', 'Literature'])
#
# mapping: common starting pattern: desired name
#
categories = {
'Histo': 'History',
'Economics': 'Economics',
'English': 'English',
'Literature': 'Literature'
}
def correct_categories(cols):
return [categories[cat] for col in cols for cat in categories.keys() if col.startswith(cat)]
df = pd.read_csv('data.csv', sep=r'\s+', index_col='Id')
#print(df.columns, len(df.columns))
#print(correct_categories(df.columns), len(correct_categories(df.columns)))
#print(df.groupby(pd.Index(correct_categories(df.columns)),axis=1).sum())
rslt = df.groupby(correct_categories(df.columns),axis=1).sum()
print(rslt)
print('History\n', rslt['History'])
Выход:
Economics English History Literature
Id
56 1 1 2 1
11 1 0 0 1
6 1 1 0 0
43 2 0 1 1
14 1 1 1 0
History
Id
56 2
11 0
6 0
43 1
14 1
Name: History, dtype: int64
PS Вы можете захотеть добавить отсутствующие категории в categories
map / dictionary
df['History']
, у меня есть ошибка, но нет ошибки с df.get('history')
– Amanda
2 March 2016 в 16:36
groupby
принимает аргумент axis = 1, поэтому может работать что-то вродеdf.groupby(df.columns.str.split("-").str[0],axis=1).sum()
. (СтолбецHisto
заставляет меня задаться вопросом, нужно ли нам использовать другое условие группировки, но вы получите идею.) – DSM 2 March 2016 в 13:24