#python #pandas #crosstab
Вопрос:
Привет, я пытаюсь составить несколько таблиц непредвиденных обстоятельств. Я хочу, чтобы он был в функции, чтобы я мог использовать его для различных столбцов/фреймов данных/комбинаций и т. Д.
в настоящее время у меня есть фрейм данных, который выглядит следующим образом
df = pd.DataFrame(data={'group' : ['A','A','B','B','C','D'], 'class': ['g1','g2','g2','g3','g1','g2'], 'total' : ['0-10','20-30','0-10','30-40','50-60','20-30'], 'sub' : ['1-4', '5-9','10-14', '15-19','1-4','15-19'], 'n': [3,14,12,11,21,9]})
и функция, которая выглядит так
def cts(tabs, df): out=[] for col in df.loc[:,df.columns != tabs]: a = pd.crosstab([df[tabs]], df[col]) out.append(a) return(out) cts('group', df)
что работает для перекрестных таблиц для одного столбца по сравнению с остальными. Но я хочу добавить два (или больше!) уровни для группировки, например
pd.crosstab([df['group'], df['class']], df['total'])
где общее количество пересчитывается как по группе, так и по классу.
Я думаю, что var «вкладки» в функции должен представлять собой список имен столбцов, но когда я пытаюсь сделать его списком, я получаю ошибки с недопустимым синтаксисом. Я надеюсь, что в этом есть смысл.. спасибо!
Ответ №1:
Попробуй:
def cts(tabs, df): out=[] cols = [col for col in df.columns if col not in tabs] for col in df.loc[:,cols]: a = pd.crosstab([df[tab] for tab in tabs], df[col]) out.append(a) return(out)