通过对数据框中的列进行分组来绘制折线图

Plot line chart by grouping columns in dataframe

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

使用此代码:

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

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

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

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

#

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

我认为需要pivot with rename for months names instead numeric and for new index values use 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 indexing and isin:

过滤输入 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()