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

时间:2018-04-20 07:50:29

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

我有一个带有数据的csv文件,我将数据分组为月份,然后使用cumsum计算月份到数据帧的运行总数。

使用此代码:

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

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

output example

我现在想绘制一个图表,对月份进行分组并绘制每个值,所以基本上我将有12条绘制的线条显示值随时间变化的程度如何更高或更低。

输出图将如下图所示:每个月的cumsum: Chart showing cumsum of each month

感谢@jezrael,它现在正在运作。下面是情节 Working Output

1 个答案:

答案 0 :(得分:0)

我认为pivot需要rename代表数月而不是数字,而新索引值需要使用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()