0

我有看起来像这样的数据集。我有两个类别的月份数据,62 行,每个类别 31 行。我想在 y 轴上创建一个带有周数和月份的每周箱线图 [如 01-12、02-12、03-12 等]。

到目前为止,我已经想出了以下代码。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set()
fig, ax = plt.subplots(figsize=(18,6))
df.index = pd.to_datetime(df.Timestamp)

sns.boxplot(x=df.index.week, y='Values', data=df, hue='Category', ax=ax)

通过 Using df.index.week,我没有得到预期的周值,而是像这样给了我一年中的周数。

请指导?

4

1 回答 1

1

您可以df通过格式化列中的值来创建分组Date列:

date_range = pd.date_range(start='2013-12-01', end='2013-12-31').to_list()
df = pd.DataFrame(
    {
        "Date": date_range + date_range,
        "Values": np.random.randint(1000, 20000, 62),
        "Category": ["anti"] * 31 + ["pro"] * 31,
    }
)

用于pandas.Series.dt.strftime获取由 a 连接的年 ( %U) 和月 ( ) 周:%m-

df["week_month"] = df["Date"].dt.strftime("%U-%m")

(感谢@Cameron Riddell提供更好的方法)

然后绘制:

sns.boxplot(x="week_month", y="Values", data=df, hue="Category")

按周和月分组的箱形图

于 2021-06-24T19:11:22.023 回答