我有一个这样的数据框架:
Status hour
Cancelled 11
NA 11
Cancelled 22
NA 10
Cancelled 7
NA 6
NA 22
Cancelled 6我想创建一个图表,如下所示,我想根据所选的时间段来标记x轴:
# 0-4 --> Mid Night
# 4-8 --> Early Morning
# 8-12 --> Morning
# 12-16 --> After noon
# 16-20 --> Evening
# 20-24 --> Night预期图表(假设图表的橙色部分显示NA,蓝色部分显示已取消):

我完全不知道如何实现这一点,任何线索都将不胜感激。
发布于 2019-02-22 03:01:48
要开始这个问题,您首先需要对每个时间间隔内出现的所有'Cancelled'和'nan'进行计数。但在此之前,我将设置一些数据:
from io import StringIO
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_fwf(StringIO("""
Status hour
Cancelled 1
Cancelled 11
NA 11
NA 13
Cancelled 22
NA 10
Cancelled 17
Cancelled 18
Cancelled 19
Cancelled 7
NA 6
NA 22
Cancelled 6
"""), header=1)好了,现在我们可以循环遍历时间类别并进行计数
values = {}
for i in range(6):
values[i] = {}
status = df.loc[(df['hour'] > i*4) & (df['hour'] <= (i+1)*4), 'Status']
values[i]['Cancelled'] = status.str.contains('Cancelled').sum()
values[i]['nan'] = status.isnull().sum()因此,做情节并不是很费力
fig, ax = plt.subplots(1, 1)
for i in range(6):
ax.bar(i, values[i]["Cancelled"], color='C0')
ax.bar(i, values[i]["nan"], color='C1', bottom=values[i]["Cancelled"])
ax.set_xticks(np.r_[:6])
ax.set_xticklabels(['Mid night',
'Early Morning',
'Morning',
'After noon',
'Evening',
'Night'], rotation=45)
fig.tight_layout()这给了我以下几点:

https://stackoverflow.com/questions/54813501
复制相似问题