如何根据熊猫to_html中的行条件设置数字格式

时间:2018-10-09 13:58:33

标签: python pandas

我有带有国家/地区度量和值列的数据框:

Country| Measures| Value|
US    |Sales    |10000.000
US    |Share %  |0.10265
US    |Price    |15.82564
UK    |Sales    |10500.000
UK    |Share %  |0.30265
UK    |Price    |13.72564

我从数据库中加载数据帧,该数据帧的浮点数最多为6位, 我想在html的fomat下面

Country| Measures |Values
US    |Sales    |10000
US    |Share %  |10.2%
US    |Price    |15.83
UK    |Sales    |10500
UK    |Share %  |30.27%
UK    |Price    |13.72

使用df.to_html函数的'float_format'或'formatters'参数,我可以将所有数字分别转换为所需的格式或列特定的格式

下面我在列特定格式中使用的代码 我在行中没有行的份额和价格

df.to_html(index=False, formatters={ 'Share %': '{:,.1%}'.format,
                                                      'Price': '{:,.1f}'.format})

但是这里我的要求是基于行进行格式化

我想要

  1. 整数销售数字
  2. 共享数以百分比显示,小数点后2位
  3. 带有两位小数的价格数字

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以使用字符串格式

fmap = dict(
    Sales='{:0.0f}'.format,
    Price='{:0.2f}'.format,
    Share='{:0.2%}'.format
)

df.assign(Value=[fmap[m](v) for m, v in zip(df.Measures, df.Value)])

  Country Measures   Value
0      US    Sales   10000
1      US    Share  10.27%
2      US    Price   15.83
3      UK    Sales   10500
4      UK    Share  30.26%
5      UK    Price   13.73

备用字典规范

fmap = {
    'Sales': '{:0.0f}'.format,
    'Price': '{:0.2f}'.format,
    'Share': '{:0.2%}'.format
}