gpt4 book ai didi

python - 绘制分组日期时间 - Pandas

转载 作者:行者123 更新时间:2023-11-28 19:11:39 25 4
gpt4 key购买 nike

这篇文章有点长,所以这里是最终的预先“提问”:

有没有办法转换生成的 groupby 的 x 轴/索引,或者有办法将其他类型的参数传递给 axvspan 函数?

我有一个带有日期时间列的 DataFrame,我按 yearweekofyear 对其进行了分组。这工作正常,但 x 轴显示为元组。我想axvspan,但我不知道该由谁来处理这些元组。

import numpy as np
import pandas as pd
import datetime
from matplotlib import pylab
import matplotlib.pyplot as plt
%matplotlib inline

query = ("https://data.cityofchicago.org/resource/6zsd-86xi.json?$where=year>2010")
raw_data = pd.read_json(query)

这是 DataFrame 的概述。我将使用 date 列。

raw_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1706960 entries, 0 to 1706959
Data columns (total 22 columns):
arrest bool
beat int64
block object
case_number object
community_area float64
date datetime64[ns]
description object
district float64
domestic bool
fbi_code object
id int64
iucr object
latitude float64
location object
location_description object
longitude float64
primary_type object
updated_on object
ward float64
x_coordinate float64
y_coordinate float64
year int64
dtypes: bool(2), datetime64[ns](1), float64(7), int64(3), object(9)
memory usage: 263.7+ MB

首先,过滤除凶杀案之外的所有犯罪。

# get murders
raw_data = raw_data[raw_data["primary_type"] == "HOMICIDE"]

# plot murder count by year and week of the year
plt.figure(figsize=(18, 6))
raw_data.groupby([raw_data.date.dt.year,
raw_data.date.dt.weekofyear])["community_area"].size().plot()

Resulting Plot

因此,如您所见,x 轴表示为元组。就像我之前说的,我想添加一个 axvspan 来为我的绘图添加一个任意的绿色跨度。如果 x 轴保持它的日期时间结构,我可以像这样将值放入函数中,它会起作用:

pylab.axvspan(datetime.strptime('2015-12-1 13:40:00', "%Y-%m-%d %H:%M:%S"), 
datetime.strptime('2016-1-1 13:40:00', "%Y-%m-%d %H:%M:%S"),
facecolor='g', alpha=0.05) # green span

这将使从 2015 年 12 月 1 日到 2016 年 1 月 1 日的图表显示为绿色。有没有一种方法可以转换生成的 groupby 的 x 轴/索引,或者有一种方法可以将其他类型的参数传递给 axvspan 函数?

最佳答案

好吧,我擦掉了 ole Python for Data Analysis复制并重新发现 resample 方法,以及 pandas 处理时间序列数据的一般情况。下面的代码起到了作用(坚持使用我的原始数据集):

# doesn't really matter which column I choose, I just picked one
murders = raw_data["community_area"]
murders.index = raw_data["date"]

plt.figure(figsize=(18, 6))
murders.resample("W-MON").count().plot() # weekly, every Monday

min_date = min(murders.index)
release_date = datetime.strptime('2015-11-24 12:00:00', "%Y-%m-%d %H:%M:%S")
max_date = max(murders.index)

pylab.axvspan(min_date,
release_date,
facecolor='g', alpha=0.05) # green span
pylab.axvspan(release_date,
max_date,
facecolor='r', alpha=0.075) # red span
pylab.show()

enter image description here

关于python - 绘制分组日期时间 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com