【问题标题】:run multiple cross tabulations with function in pandas在 pandas 中运行多个具有函数的交叉表
【发布时间】:2021-12-03 18:59:35
【问题描述】:

您好,我正在尝试制作一些列联表。我希望它在一个函数中,以便我可以将它用于各种列/数据框/组合等。

当前我有一个看起来像这样的数据框

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'])

总计与组和类交叉制表。

我认为函数中的 'tabs' var 应该是列名列表,但是当我尝试将其设为列表时,我会遇到语法无效的错误。我希望这是有道理的.. 谢谢!

【问题讨论】:

    标签: python pandas crosstab


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2020-09-01
      • 2017-09-04
      • 2014-02-04
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2020-09-05
      相关资源
      最近更新 更多