Drop files here
or click to upload
import streamlit as st
import numpy as np
import pandas as pd
from st_aggrid import AgGrid, GridOptionsBuilder
@st.cache_data()
def generate_sales_data():
"""Generate dataset simulating sales data."""
np.random.seed(42)
rows = 50
# Create a more complex dataset
df = pd.DataFrame({
'Product ID': range(1, rows + 1),
'Category': np.random.choice(['Electronics', 'Clothing', 'Home', 'Sports'], rows),
'Base Price': np.random.uniform(10, 500, rows).round(2),
'Quantity Sold': np.random.randint(1, 100, rows),
})
return df
def configure_grid_options(df):
"""Configure advanced grid options with multiple features."""
gb = GridOptionsBuilder.from_dataframe(df)
# Make some columns editable
gb.configure_columns(['Base Price', 'Quantity Sold'], editable=True)
# Add virtual columns
gb.configure_column(
'Total Revenue',
valueGetter="Number(data['Base Price']) * Number(data['Quantity Sold'])",
cellRenderer="agAnimateShowChangeCellRenderer",
type=["numericColumn"],
editable=False,
valueFormatter="x.toLocaleString('en-US', {style: 'currency', currency: 'USD'})"
)
# Add conditional styling
gb.configure_column(
'Total Revenue',
cellStyle={
'styleConditions': [{
'condition': "x > 5000",
'style': {'backgroundColor': '#90EE90'} # Light green for high revenue
}]
}
)
# Configure row grouping and aggregation
gb.configure_default_column(
groupable=True,
value=True,
enableRowGroup=True,
aggFunc='sum'
)
# Add filter and sort options
gb.configure_grid_options(
enableRangeSelection=True,
enableRangeHandle=True,
suppressColumnMoveAnimation=False,
suppressRowClickSelection=False
)
return gb.build()
def main():
# Generate data
sales_data = generate_sales_data()
# Configure grid options
grid_options = configure_grid_options(sales_data)
# AgGrid with custom options
ag_return = AgGrid(
sales_data,
gridOptions=grid_options,
height=500,
theme='alpine',
allow_unsafe_jscode=True,
fit_columns_on_grid_load=True,
reload_data=False
)
if __name__ == '__main__':
main()
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?