You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit/Jupyter中对Pandas DataFrame转置并设置货币样式

解决方案:在Streamlit中展示转置并格式化的金融DataFrame

核心思路

先将Month列设为索引后转置,再通过Pandas Styler按行对Revenue数据应用货币格式化,既满足轴翻转的展示需求,又能保留样式设置能力。

完整实现代码

import pandas as pd
import streamlit as st

# 示例数据
data = {
    'Month': ['January', 'February', 'March', 'April'],
    'Revenue': [10000, 12000, 11000, 13000],
    'Expenses': [4000, 4500, 4200, 4800]
}

# 创建DataFrame并设置Month为索引
df = pd.DataFrame(data)
df.set_index('Month', inplace=True)

# 转置DataFrame
transposed_df = df.T

# 定义格式化函数:对Revenue行应用货币格式
def format_financial_row(row):
    if row.name == 'Revenue':
        return ['${:,.2f}'.format(val) for val in row]
    return row.values.tolist()

# 应用样式并在Streamlit展示
styled_table = transposed_df.style.apply(format_financial_row, axis=1)
st.dataframe(styled_table)

关键步骤说明

  1. 设置索引并转置:将Month设为索引后转置,让Revenue、Expenses成为行名,月份数据横向排列,符合金融报表展示习惯。
  2. 行级样式格式化:通过style.apply()按行处理,识别Revenue行后将数值格式化为$X,XXX.XX的货币格式,其他行保持原始数值。
  3. Streamlit展示:直接将带样式的DataFrame传入st.dataframe(),即可在Streamlit应用中渲染出符合需求的表格。

扩展优化(可选)

如果需要突出Revenue行(比如加粗),可以修改格式化函数返回HTML样式:

def format_financial_row(row):
    if row.name == 'Revenue':
        return [f'<strong>${:,.2f}</strong>'.format(val) for val in row]
    return [str(val) for val in row]

# 注意:需要设置escape=False让HTML生效
styled_table = transposed_df.style.apply(format_financial_row, axis=1).set_properties(**{'text-align': 'right'})
st.dataframe(styled_table, escape=False)

内容的提问来源于stack exchange,提问作者shinobi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:09:55