【问题标题】:Plot line chart by grouping columns in dataframe通过对数据框中的列进行分组来绘制折线图
【发布时间】:2018-04-20 07:50:29
【问题描述】:

我有一个 csv 文件,其中包含我按月份对信息进行分组的数据,然后使用 cumsum 将月份的运行总计计算到一个数据框中。

使用此代码:

df = df.sort_index(sort_remaining=True).sort_values('months')
df['value'] = df.groupby('months')['value'].cumsum()

EXCEL 中的输出示例,但我的 DF 与 1000 行相同:

我现在想绘制一个图表,将月份分组并绘制每个值,所以基本上我将有 12 条绘制线显示值如何随着时间的推移而升高或降低。

输出图将如下图所示,显示每个月的累积和:

#

感谢@jezrael,它现在可以工作了。下面是剧情

【问题讨论】:

    标签: pandas matplotlib plot linechart cumulative-line-chart


    【解决方案1】:

    我认为需要 pivotrename 来代替数字名称,对于新索引值使用 cumcount

    d = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
         6 : 'Jun',7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
    
    g = df.groupby('months').cumcount()
    pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d).plot()
    

    详情

    print(pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d))
    months    Jan   Feb   Mar   Apr
    0        50.0   2.0  10.0   5.0
    1        80.0   3.0  16.0  20.0
    2       120.0   8.0  31.0  40.0
    3       140.0  11.0  34.0  50.0
    4         NaN  15.0  43.0  75.0
    

    编辑:

    仅定义几个月的情节使用subset

    months = ['Mar','Apr']
    g = df.groupby('months').cumcount()
    pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d)[months].plot()
    

    或者通过boolean indexingisin过滤输入DataFrame中的月份:

    df = df[df['months'].isin([3,4])]
    g = df.groupby('months').cumcount()
    pd.pivot(index=g, columns=df['months'], values=df['value']).rename(columns=d)[months].plot()
    

    【讨论】:

    • 使用完整数据集时出现索引重复错误。我已经上传了文件。有没有可能你看看?
    • @davidp13 - 第一个问题是需要axis y 的绘图索引值吗?
    • @davidp13 - 或者重要数据仅在列monthsvalue 中?
    • 我猜索引值不重要,所以修改了答案。
    • 宾果游戏!感谢您解决我的问题。我会把图表贴出来看看。
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多