Python一年多行

2024-06-16 10:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由两列组成的数据集:Dateds和volumey。我想了解不同月份和年份的日平均销量趋势。我想有x轴和y轴上的平均体积月名称。这些线应该代表不同的年份。这是示例数据集和我遇到的问题

df = pd.DataFrame([
    {"ds":"2017-01-01","y":3},
    {"ds":"2017-01-18","y":4},
    {"ds":"2017-02-04","y":6},
    {"ds":"2018-01-06","y":2},
    {"ds":"2018-01-12","y":8},
    {"ds":"2018-02-08","y":2},
    {"ds":"2018-03-02","y":8},
    {"ds":"2018-03-15","y":2},
    {"ds":"2018-03-22","y":8},
    ])
df["ds"] = pd.to_datetime(df["ds"])
df.set_index("ds",inplace=True)
df.resample("M").mean().plot()

Desired output


Tags: 数据名称示例dataframedfds体积代表
2条回答

您必须按年份和月份分组:

import calendar # to use months' proper names
means = df.groupby([df.index.month, df.index.year]).mean()\
          .unstack().reset_index(0, drop=True)\
          .rename(dict(enumerate(calendar.month_abbr[1:])))
#ds   2017  2018
#ds             
#Jan   3.5   5.0
#Feb   6.0   2.0
#Mar   NaN   6.0

使用聚合mean的解决方案,对于具有年份的月份名称,通过^{}和最后一次绘图进行重塑:

df["ds"] = pd.to_datetime(df["ds"])
#if necessary sorting
#df = df.sort_values('ds')
df1 = (df.groupby([df["ds"].dt.strftime('%b'), df["ds"].dt.year], sort=False)['y']       
         .mean()
         .unstack(fill_value=0))
print (df1)
ds   2017  2018
ds             
Jan   3.5   5.0
Feb   6.0   2.0
Mar   0.0   6.0

df1.plot()

相关问题 更多 >