我有一个带有数据的csv文件,我将数据分组为月份,然后使用cumsum计算月份到数据帧的运行总数。
使用此代码:
df = df.sort_index(sort_remaining=True).sort_values('months')
df['value'] = df.groupby('months')['value'].cumsum()
EXCEL中的OUTPUT示例,但我的DF看起来与1000行的相同:
我现在想绘制一个图表,对月份进行分组并绘制每个值,所以基本上我将有12条绘制的线条显示值随时间变化的程度如何更高或更低。
#答案 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 indexing
和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()