在 python pandas 中打印交叉表
Printing crosstab in python pandas
我有一个关于汽车品牌和类型的 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。
感谢您的帮助。
如果我完全误解了这个问题,请纠正我,但你要找的是这样的:
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}')
我有一个关于汽车品牌和类型的 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。 感谢您的帮助。
如果我完全误解了这个问题,请纠正我,但你要找的是这样的:
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}')