gpt4 book ai didi

python - 如何对数据进行分组并绘制折线图

转载 作者:行者123 更新时间:2023-12-01 02:51:03 27 4
gpt4 key购买 nike

这是我第一次使用 pandas 和 iPython 笔记本,无法找出解决我的问题的正确搜索词。

我有一个 .xls 文件,用于存放位于 3 个站点 AB 的 3 个构建服务器的编译时间数据C。这些构建服务器编译多个项目,因此我将选择任何特定项目。因此,我需要绘制这样的数据(对于特定项目 - 不是全部在一张图中,以保持简单):

X-axis = date
Y-axis = average build time on that date

3 lines for sites A, B and C

到目前为止我所做的:

import pandas as pd
import numpy as np
import matplotlib as plt

file= r'/home/abc/Downloads/request.xls'
df = pd.read_excel(file,parse_dates=['Date'])

build_times = df[['Date','site','project','Duration']]
build_group = build_times.groupby(['Date','site','project']).mean()

我需要以下方面的帮助:

  1. 我如何仅选择成功的构建如果有一个 status 列包含 0 和 1。

  2. 如何使用上述 X 和 Y 绘制站点 ABC(针对特定项目)的线条轴。

编辑

经过@jezrael的回答,我能够得到以下数据

2017-03-27  A   project1    963.200000
B project2 4587.176471
C project2 1449.375000
C project1 1449.375000
.......
2017-03-28 A project1 93.200000
B project1 4787.176471
C project2 1339.375000
C project1 1749.375000

最佳答案

我认为您需要首先按 boolean indexing 进行过滤或query :

build_group = build_times[build_times['status'] == 1]
.groupby(['Date','site','project'])['Duration'].mean()

或者:

build_group = build_times.query('status == 1')
.groupby(['Date','site','project'])['Duration'].mean()

输出与:

d={'Duration': [963.2, 4587.176471, 1449.375, 1449.375, 93.2, 4787.176471, 1339.375, 1749.375], 
'project': ['project1', 'project2', 'project2', 'project1', 'project1', 'project1', 'project2', 'project1'],
'Date': [pd.Timestamp('2017-03-27 00:00:00'), pd.Timestamp('2017-03-27 00:00:00'), pd.Timestamp('2017-03-27 00:00:00'), pd.Timestamp('2017-03-27 00:00:00'), pd.Timestamp('2017-03-28 00:00:00'), pd.Timestamp('2017-03-28 00:00:00'), pd.Timestamp('2017-03-28 00:00:00'), pd.Timestamp('2017-03-28 00:00:00')],
'site': ['A', 'B', 'C', 'C', 'A', 'B', 'C', 'C']}
build_group = pd.DataFrame(d).set_index(['Date','site','project'])['Duration']
print (build_group)
Date site project
2017-03-27 A project1 963.200000
B project2 4587.176471
C project2 1449.375000
project1 1449.375000
2017-03-28 A project1 93.200000
B project1 4787.176471
C project2 1339.375000
project1 1749.375000
Name: Duration, dtype: float64

然后通过 unstack reshape 形状与 level=1 (因为 level==1sites)并按 xs 选择。最后plot :

#for check column names for typos
print (build_group.index.get_level_values(2).unique().tolist())
['project1', 'project2']

p = 'project1'
build_group = build_group.unstack(level=1).xs(p, level=1, axis=0)
print (build_group)
site A B C
Date
2017-03-27 963.2 NaN 1449.375
2017-03-28 93.2 4787.176471 1749.375

build_group.plot()

graph

关于python - 如何对数据进行分组并绘制折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44774151/

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