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

如何按月统计多color列的颜色频率与占比以制作折线图

多color列月度颜色频率与占比统计实现方案

实现步骤(基于Python Pandas)

1. 导入依赖并加载原始数据

import pandas as pd
import numpy as np

# 构造示例数据,实际使用时可替换为pd.read_csv等读取自己的文件
data = {
    'ID': [55, 67, 83, 78, 43, 29],
    'color': ['red', 'yellow', 'blue', 'red', 'green', 'yellow'],
    'color2': ['blue', np.nan, 'yellow', 'yellow', np.nan, 'green'],
    'color3': [np.nan, np.nan, np.nan, 'blue', np.nan, np.nan],
    'date': ['2020-03-15', '2020-05-02', '2020-05-17', '2020-12-15', '2021-01-27', '2021-01-03']
}
df = pd.DataFrame(data)
# 日期列转时间格式
df['date'] = pd.to_datetime(df['date'])

2. 宽表转长表,消除多color列影响

# 生成标准月份字段,格式为mm-YYYY
df['Month'] = df['date'].dt.strftime('%m-%Y')
# 把3列color字段转为长格式,剔除空值
df_long = df.melt(
    id_vars=['ID', 'Month'], 
    value_vars=['color', 'color2', 'color3'],
    value_name='color'
).dropna(subset=['color'])

3. 按月统计频率、占比,补全缺失月份

# 统计每月各颜色出现次数
freq_df = df_long.groupby(['Month', 'color'])['color'].count()\
    .unstack(fill_value=0)\
    .add_prefix('freq_')
# 生成时间范围内所有完整月份,补全无数据的月份
all_months = pd.date_range(
    start=df['date'].min(), 
    end=df['date'].max(), 
    freq='MS'
).strftime('%m-%Y')
freq_df = freq_df.reindex(all_months, fill_value=0)
# 计算各颜色月度占比,保留1位小数
month_total = freq_df.sum(axis=1)
pct_df = freq_df.div(month_total, axis=0)\
    .multiply(100)\
    .round(1)\
    .fillna(0)\
    .rename(columns=lambda x: x.replace('freq_', '%_'))
# 合并频率和占比得到最终结果
result = pd.concat([freq_df, pct_df], axis=1).reset_index()

后续使用

输出的result完全匹配你需要的目标格式,直接提取%_开头的字段即可绘制对应颜色的月度占比折线图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:03