запустите несколько перекрестных таблиц с функцией в панд

#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)