Python:Cant pyplot line chart using.u选项卡

2024-07-08 08:22:27 发布

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

我有一个CSV作为日志文件/db。其结构如下:

User1,Client3,Ops/Admin,19:33:46,19:33:57,178.054662,Notes,05/09/2018
User1,Client2,Ops/Admin,20:33:46,20:33:57,449.272576,Notes,05/09/2018
User1,Client3,Support Management,21:33:46,21:33:57,1073.425258,Notes,05/09/2018
User1,Client2,Support Management,22:33:46,22:33:57,290.640219,Notes,05/09/2018
User1,Client3,Ops/Admin,23:33:46,23:33:57,402.223927,Notes,05/09/2018
User1,Client1,Support Management,00:33:46,00:33:57,761.266062,Notes,05/09/2018
User1,Client1,Business Developement,01:33:46,01:33:57,1623.303656,Notes,05/09/2018

我想用matplotlib.pyplot做一个折线图,它将每个客户在每个日期的第[5]列的总和相加。即同一图表上的另一条线,其中x轴是日期(第[7]列),y轴是该日期值的总和(第[5]列)

我使用熊猫,这是我的出发点:

import matplotlib.pyplot as plt
import pandas as pd
import datetime, csv

csv_file = pd.read_csv("file.csv",
                           names = ['USER',
                                   'CLIENT',
                                   'TYPE',
                                   'START',
                                   'END',
                                   'DURATION',
                                   'NOTES',
                                   'DATE'])

然后,我尝试将表作为透视表:

date_pivot = csv_file.pivot_table('DURATION', index='CLIENT', columns='DATE')

或者使用.groupby()函数:

dategroup = csv_file.groupby(['CLIENT','DATE'], as_index = False).sum()

这两种方法似乎都生成了一个表,看起来应该足够使用它了

问题是,由于不乏尝试(…),我无法在matplotlib.pyplot.plot()上按日期绘制客户机的求和值。。。你能帮忙吗

到目前为止,我唯一的想法是:

  • 不知何故,我应该重新排列表,让客户机沿着Y轴(/索引)运行,而日期沿着x轴(/标题)运行吗
  • 它是否需要使用.loc()的某种形式的def迭代函数

在此方面的任何帮助都将不胜感激,因此提前感谢


Tags: csvimportclientsupportdateadminmatplotlibas
2条回答
import numpy as np
csv_file=pd.read_csv('file.csv',names =   ['USER',
                               'CLIENT',
                               'TYPE',
                               'START',
                               'END',
                               'DURATION',
                               'NOTES',
                               'DATE'],parse_dates=['DATE'])
csv_file.pivot_table('DURATION',index='DATE',columns='CLIENT',aggfunc=np.sum)
  • x轴/索引/日期
  • 多个y轴/列/客户端
  • 聚合函数=和

这会再次根据客户机将客户机和日期的求和结果拆分为多个组,并为每个客户机绘制单独的行:

import matplotlib.pyplot as plt
import pandas as pd

df['DATE'] = pd.to_datetime(df['DATE'])
aggregated = df.groupby(['CLIENT', 'DATE']).sum().reset_index()

fig, ax = plt.subplots()

for key, group in aggregated.groupby(['CLIENT']):
    ax = group.plot(ax=ax, kind='line', x='DATE', y='DURATION', label=key)

plt.show()

这是基于来自this答案的群图技巧

相关问题 更多 >

    热门问题