通过对数据框中的列进行分组来绘制折线图
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()
我有一个 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()