【问题标题】:Printing crosstab in python pandas在 python pandas 中打印交叉表
【发布时间】:2021-02-15 05:56:02
【问题描述】:

我有一个用于汽车品牌和类型的 DataFrame。

我用过这个:

conditional_p = pd.crosstab(cars_selected_df.type, cars_selected_df.make, margins=True, normalize='columns')

这给了我想要的条件概率计算。但是,在使用 pd.crosstab 后,我无法打印条件概率 %。

如果我打印 conditional_p,它看起来像这样:

make        alfa-romero      audi  bmw  ...  volkswagen     volvo       All
type                              ...                                
standard            1.0  0.714286  1.0  ...    0.833333  0.545455  0.819512
turbo               0.0  0.285714  0.0  ...    0.166667  0.454545  0.180488

我希望我的输出显示如下:

Prob(type=standard | make=alfa-romero) =  100 %
Prob(type=turbo | make=alfa-romero) =  0 %
Prob(type=standard | make=audi) =  71.43 %
Prob(type=turbo | make=audi) =  28.57 %
...

对于我拥有的所有品牌(有 20 种)和类型(2 种不同类型)。我在想我可以使用 lamda 函数来做到这一点,但是,我如何引用交叉表解决的条件概率值?我是否必须使用 df.stack() 将交叉表返回到 DataFrame 中,然后我可以在我的 lambda 函数中引用它?我试过了,但还是没有成功。

这是我的尝试:

y = conditional_p.stack()
cond_probabilities_df =  pd.DataFrame({'car_type':cars_df['type'].unique(), 'make_name':cars_df['make'].unique(), 'cond_prob' : y})
print_cond_probability = lambda x: print('Prob(type='+x.car_type+') | make= '+x.make_name+'= '+x.cond_prob+'%')

我得到了这个错误: ValueError: 数组的长度必须相同

旁注:我是个新手,不使用 groupby,只使用 pandas。 感谢您的帮助。

【问题讨论】:

    标签: python pandas crosstab


    【解决方案1】:

    如果我完全误解了这个问题,请纠正我,但是是这样的,你在找什么:

    for make in conditional_p.columns:
        for typ in conditional_p.index:
            print(f'Prob(type={typ} | make={make}) = {conditional_p[make][typ] * 100:.2f}')
    

    【讨论】:

    • 是的!确切地。我想我用 lambda 函数让事情复杂化了?
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多