如何在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)
关键步骤说明
- 设置索引并转置:将
Month设为索引后转置,让Revenue、Expenses成为行名,月份数据横向排列,符合金融报表展示习惯。 - 行级样式格式化:通过
style.apply()按行处理,识别Revenue行后将数值格式化为$X,XXX.XX的货币格式,其他行保持原始数值。 - 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
相关产品推荐
相关产品推荐

