#python #dataframe #matplotlib #unique
#python #dataframe #matplotlib #уникальный
Вопрос:
Здесь у меня есть dataframe с двумя уникальными временными окнами в df_mo4['time_window']
, 2018-09-26 11:30:00
to 2018-09-26 11:32:30
и 2018-09-26 11:32:30
в 2018-09-26 11:35:00
. Я хотел бы построить 2 набора гистограмм (не подзаголовок), где первая гистограмма отображает среднее, максимальное и минимальное время индивидуального идентификатора в одном временном окне, а следующая гистограмма отображает те же данные в другом временном окне, что я могу с этим поделать? Кроме того, я хотел бы, чтобы заголовок был похож на Duration (time_window). Спасибо!
df.plot(kind='bar')
plt.title('Duration n {}'.format(df['time_window']))
plt.ylabel('Time (s)')
plt.xlabel('ID')
plt.legend(['Mean Time (s)', 'Minimum Time (s)', 'Maximum Time (s)'], loc='upper right')
plt.xticks(np.arange(len(df['ID'])), df['ID'], fontsize=5)
plt.show()
Пример данных:
ID time_window mean_time min_time max_time
0 8027 2018-09-26 11:30:00 to 2018-09-26 11:32:30 0.101679 0.056412 0.340988
1 8027 2018-09-26 11:32:30 to 2018-09-26 11:35:00 0.090957 0.052196 0.323442
2 8028 2018-09-26 11:30:00 to 2018-09-26 11:32:30 0.199167 0.076872 0.614797
3 8028 2018-09-26 11:32:30 to 2018-09-26 11:35:00 0.239885 0.062660 0.590710
4 8029 2018-09-26 11:30:00 to 2018-09-26 11:32:30 0.243241 0.098516 0.5713
5 8030 2018-09-26 11:30:00 to 2018-09-26 11:32:30 0.083064 0.055656 0.27892
6 8031 2018-09-26 11:32:30 to 2018-09-26 11:35:00 0.134786 0.058290 0.51279
Ответ №1:
Это код, который я могу вам предложить:
#Read your Dataframe
df = pd.read_csv('Test.csv', index_col=None, header='infer', encoding="utf-8-sig")
#split the time_window column into two columns, so you can calculate Duration
df['start_time'], df['end_time'] = df['time_window'].str.split('to', 1).str
#convert start and ending time columns to datetime and ID to numeric
df[['start_time','end_time']] = df[['start_time','end_time']].apply(pd.to_datetime, format='%Y-%m-%d %H:%M:%S')
df["ID"] = pd.to_numeric(df["ID"])
#Calculate the duration of a time window and convert into seconds
df['Duration'] = df['start_time'] - df['end_time']
df['Duration']=df['Duration']/np.timedelta64(1,'s')
#plot
ax = df.plot(x="ID", y=["min_time", "max_time", "mean_time"], kind="bar", rot=25)
ax.set_xlabel("Instances (ID)")
ax.set_ylabel("Duraction(s)")
ax.set_title("Visualization")
rects = ax.patches
labels = df['Duration']
for rect, label in zip(rects, labels):
height = rect.get_height()
ax.text(rect.get_x() rect.get_width(), height 0.3, label,
ha='center', va='bottom')
Это приведет к следующему фрейму данных и графику.
Это то, что вы ищете? Вы говорите, что вам не нужны подзаголовки, но это также звучит так, как будто вы хотели бы отдельный график для каждого идентификатора?