在熊猫中,是否有一种简洁的方式来绘制每周的数据?

2024-03-29 04:42:36 发布

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

我有一个简单的dataframe,其中包含一组针对datetimes记录的值,这些值被设置为索引。有没有什么简单的方法可以把这些数据绘制成一周中的几天?我的意思是类似下面这样的东西,一周中的几天横轴,不同星期的数据用不同的颜色绘制:

我当前的代码如下所示,但对于一个概念上简单的事情来说,它似乎很复杂:

df["weekday"]          = df["datetime"].dt.weekday
df["weekday_name"]     = df["datetime"].dt.weekday_name
df["time_through_day"] = df["datetime"].map(lambda x: x - datetime.datetime.combine(x.date(), datetime.time()))

def days_through_week(row):

    return row["weekday"] + row["time_through_day"] / (24 * np.timedelta64(1, "h"))

df["days_through_week"] = df.apply(lambda row: days_through_week(row), axis = 1)

datasets = []
dataset = []
previous_days_through_week = 0
for days_through_week, value in zip(df["days_through_week"], df["value"]):
    if abs(days_through_week - previous_days_through_week) < 5:
        dataset.append([days_through_week, value])
    else:
        datasets.append(dataset)
        dataset = []
    previous_days_through_week = days_through_week

for dataset in datasets:

    x = [datum[0] for datum in dataset]
    y = [datum[1] for datum in dataset]

    plt.plot(x, y, linestyle = "-", linewidth = 1.3)

plt.ylabel("value")
plt.xticks(
    [         0.5,         1.5,         2.5,         3.5,         4.5,         5.5,         6.5],
    [    "Monday",   "Tuesday", "Wednesday",  "Thursday",    "Friday",  "Saturday",    "Sunday"]
)

Tags: indffordatetimetimevaluedaysdataset
1条回答
网友
1楼 · 发布于 2024-03-29 04:42:36

设置:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


np.random.seed(51723)

#Make some fake data to play with. Includes a partial week.
n = pd.DatetimeIndex(start="2-Jan-2017", end="1-Mar-2017", freq="1H")
df = pd.DataFrame(index=n, data=np.random.randn(n.size), columns=['A'])
df.A = df.groupby(df.index.week).A.transform('cumsum')

绘图:

^{pr2}$

plot of weekly chunks

相关问题 更多 >