运行 函数在 pandas 中的多个交叉表
run multiple cross tabulations with function in pandas
您好,我正在尝试制作一些列联表。我想要它在一个函数中,所以我可以将它用于各种 columns/dataframes/combinations 等
目前我的数据框看起来像这样
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'])
其中总计针对两个组和class交叉制表。
我认为函数中的 'tabs' var 应该是一个列名列表,但是当我尝试将其设为一个列表时,我收到错误语法无效。我希望这是有道理的。谢谢!
尝试:
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)
您好,我正在尝试制作一些列联表。我想要它在一个函数中,所以我可以将它用于各种 columns/dataframes/combinations 等
目前我的数据框看起来像这样
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'])
其中总计针对两个组和class交叉制表。
我认为函数中的 'tabs' var 应该是一个列名列表,但是当我尝试将其设为一个列表时,我收到错误语法无效。我希望这是有道理的。谢谢!
尝试:
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)