1

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

使用此代码:

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

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

输出示例

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

输出图将如下图所示,显示每个月的 cumsum: 图表显示每个月的累计

#

感谢@jezrael,它现在正在工作。下面是剧情 工作输出

4

1 回答 1

0

我相信需要几个月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()

DataFrame或通过boolean indexingand过滤输入中的月份isin

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()
于 2018-04-20T08:05:40.720 回答