Practice project, testing Jupyter and Python as an alternative to Excel for reviewing data.

In [21]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
In [22]:
# reading the data
data = pd.read_csv("DataForPandasProject.csv")
data.head(3)
Out[22]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
0 Manager1 7/10/2019 Queue1 Agent2 Inbound 197 0.0 0.0 15:36:40 09:14:08 03:35:43 28:54:51 1734.85 00:04:45 00:03:17 00:01:08 00:08:48 34.57%
1 Manager1 7/10/2019 Queue1 Agent2 Internal 4 0.0 0.0 00:20:47 00:02:29 00:04:02 00:27:18 27.30 00:05:12 00:02:29 00:01:01 00:06:50 0.77%
2 Manager1 7/10/2019 Queue1 Agent2 Outbound 21 0.0 0.0 02:19:39 00:59:37 00:32:52 04:21:39 261.65 00:06:39 00:04:35 00:01:56 00:10:28 5.15%
In [23]:
# getting an overview of our data
print("Our data has {0} rows and {1} columns".format(data.shape[0], data.shape[1]))
# checking for missing values
print("Are there missing values? {}".format(data.isnull().any().any()))
data.describe()
Our data has 1035 rows and 18 columns
Are there missing values? True
Out[23]:
Accepted Rejected Short Handle Time Minutes
count 1035.000000 1034.000000 1034.000000 1035.000000
mean 42.861836 0.054159 0.187621 407.159807
std 54.312471 0.286797 0.609383 495.037582
min 0.000000 0.000000 0.000000 0.000000
25% 6.000000 0.000000 0.000000 34.000000
50% 13.000000 0.000000 0.000000 150.000000
75% 72.000000 0.000000 0.000000 715.500000
max 245.000000 3.000000 10.000000 2116.000000
In [24]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1035 entries, 0 to 1034
Data columns (total 18 columns):
Manager                1035 non-null object
Date                   1035 non-null object
Agent Group            1035 non-null object
Agent Name             1035 non-null object
Interaction Type       1034 non-null object
Accepted               1035 non-null int64
Rejected               1034 non-null float64
Short                  1034 non-null float64
Engage Time            1034 non-null object
Hold Time              1034 non-null object
Wrap Time              1034 non-null object
Handle Time            1034 non-null object
Handle Time Minutes    1035 non-null float64
Avg Engage Time        1034 non-null object
Avg Hold Time          1034 non-null object
Avg Wrap Time          1034 non-null object
Avg Handle Time        1034 non-null object
Engage Time %          1034 non-null object
dtypes: float64(3), int64(1), object(14)
memory usage: 145.6+ KB
In [25]:
data["Interaction Type"].fillna("None", inplace = True)
data["Rejected"].fillna(0, inplace = True)
data["Short"].fillna(0, inplace = True)
data["Engage Time"].fillna(0, inplace = True)
data["Hold Time"].fillna(0, inplace = True)
data["Wrap Time"].fillna(0, inplace = True)
data["Handle Time"].fillna(0, inplace = True)
data["Avg Engage Time"].fillna(0, inplace = True)
data["Avg Hold Time"].fillna(0, inplace = True)
data["Avg Wrap Time"].fillna(0, inplace = True)
data["Avg Handle Time"].fillna(0, inplace = True)
data["Engage Time %"].fillna(0, inplace = True)
In [26]:
#convert to usable and faster formats
data["Manager"] = data["Manager"].astype("category")
data["Date"] = pd.to_datetime(data["Date"])
data["Agent Group"] = data["Agent Group"].astype("category")
data["Agent Name"] = data["Agent Name"].astype("category")
data["Interaction Type"] = data["Interaction Type"].astype("category")
data["Engage Time"] = pd.to_timedelta(data["Engage Time"])
data["Hold Time"] = pd.to_timedelta(data["Hold Time"])
data["Wrap Time"] = pd.to_timedelta(data["Wrap Time"])
data["Handle Time"] = pd.to_timedelta(data["Handle Time"])
data["Avg Engage Time"] = pd.to_timedelta(data["Avg Engage Time"])
data["Avg Hold Time"] = pd.to_timedelta(data["Avg Hold Time"])
data["Avg Wrap Time"] = pd.to_timedelta(data["Avg Wrap Time"])
data["Avg Handle Time"] = pd.to_timedelta(data["Avg Handle Time"])
In [56]:
from datetime import datetime
from datetime import date
In [57]:
datetime.today()
Out[57]:
datetime.datetime(2019, 7, 20, 11, 0, 59, 6150)
In [63]:
today = datetime.today()
type(today)
todaydate = date.today()
type(todaydate)
todaydate
Out[63]:
datetime.date(2019, 7, 20)
In [27]:
data.info()
#verify that there are no longer any null values and useful format
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1035 entries, 0 to 1034
Data columns (total 18 columns):
Manager                1035 non-null category
Date                   1035 non-null datetime64[ns]
Agent Group            1035 non-null category
Agent Name             1035 non-null category
Interaction Type       1035 non-null category
Accepted               1035 non-null int64
Rejected               1035 non-null float64
Short                  1035 non-null float64
Engage Time            1035 non-null timedelta64[ns]
Hold Time              1035 non-null timedelta64[ns]
Wrap Time              1035 non-null timedelta64[ns]
Handle Time            1035 non-null timedelta64[ns]
Handle Time Minutes    1035 non-null float64
Avg Engage Time        1035 non-null timedelta64[ns]
Avg Hold Time          1035 non-null timedelta64[ns]
Avg Wrap Time          1035 non-null timedelta64[ns]
Avg Handle Time        1035 non-null timedelta64[ns]
Engage Time %          1035 non-null object
dtypes: category(4), datetime64[ns](1), float64(3), int64(1), object(1), timedelta64[ns](8)
memory usage: 119.4+ KB
In [28]:
data.head()
Out[28]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
0 Manager1 2019-07-10 Queue1 Agent2 Inbound 197 0.0 0.0 15:36:40 09:14:08 03:35:43 1 days 04:54:51 1734.85 00:04:45 00:03:17 00:01:08 00:08:48 34.57%
1 Manager1 2019-07-10 Queue1 Agent2 Internal 4 0.0 0.0 00:20:47 00:02:29 00:04:02 0 days 00:27:18 27.30 00:05:12 00:02:29 00:01:01 00:06:50 0.77%
2 Manager1 2019-07-10 Queue1 Agent2 Outbound 21 0.0 0.0 02:19:39 00:59:37 00:32:52 0 days 04:21:39 261.65 00:06:39 00:04:35 00:01:56 00:10:28 5.15%
3 Manager1 2019-07-10 Queue1 Agent8 Inbound 102 0.0 0.0 19:00:47 05:50:22 01:33:57 1 days 02:46:35 1606.58 00:11:11 00:03:54 00:00:56 00:15:18 42.38%
4 Manager1 2019-07-10 Queue1 Agent8 Internal 8 0.0 0.0 00:57:18 00:06:11 00:06:56 0 days 01:10:25 70.42 00:07:10 00:03:06 00:00:52 00:08:48 2.13%

Handle Time, Accepted and Rejected

In [29]:
#isolate the three columns
top5 = data[["Agent Name","Handle Time Minutes", "Accepted"]]
In [30]:
#show the highest numbers on top
top5.sort_values(["Handle Time Minutes", "Accepted"], ascending = [False, False]).head()
Out[30]:
Agent Name Handle Time Minutes Accepted
169 Agent47 2116.00 235
208 Agent47 2030.00 245
12 Agent16 1911.02 172
202 Agent45 1860.00 160
244 Agent47 1821.00 206
In [31]:
#show the highest rejecteds
rej = data[["Agent Name","Rejected"]]
rej.sort_values("Rejected").tail(13)
Out[31]:
Agent Name Rejected
42 Agent2 1.0
268 Agent30 2.0
516 Agent45 2.0
125 Agent45 2.0
47 Agent5 2.0
806 Agent45 2.0
113 Agent38 2.0
214 Agent8 2.0
433 Agent12 2.0
519 Agent47 2.0
148 Agent16 2.0
238 Agent45 3.0
178 Agent8 3.0
In [32]:
#pivot table
pd.pivot_table(data, index= ['Manager', "Agent Name"], values= ["Accepted", "Rejected"])
Out[32]:
Accepted Rejected
Manager Agent Name
Manager1 Agent1 50.000000 0.000000
Agent10 42.666667 0.000000
Agent2 56.613333 0.026667
Agent3 59.600000 0.000000
Agent4 39.666667 0.000000
Agent5 38.666667 0.333333
Agent6 34.666667 0.000000
Agent7 32.166667 0.000000
Agent8 27.413333 0.133333
Agent9 65.666667 0.000000
Manager2 Agent11 32.666667 0.000000
Agent12 46.792208 0.077922
Agent13 57.802632 0.000000
Agent14 44.000000 0.000000
Agent15 43.500000 0.000000
Agent16 37.307692 0.038462
Agent17 41.000000 0.000000
Agent18 47.000000 0.000000
Agent19 47.333333 0.333333
Agent20 24.166667 0.000000
Manager3 Agent21 32.333333 0.166667
Agent22 45.000000 0.000000
Agent23 54.000000 0.000000
Agent24 62.333333 0.000000
Agent25 41.400000 0.000000
Agent26 29.500000 0.166667
Agent27 37.200000 0.000000
Agent28 44.000000 0.166667
Agent29 50.324675 0.000000
Agent30 28.123288 0.082192
Manager4 Agent31 6.500000 0.000000
Agent32 36.666667 0.000000
Agent33 42.666667 0.000000
Agent34 55.666667 0.166667
Agent35 35.958333 0.000000
Agent36 37.175676 0.013514
Agent37 47.666667 0.000000
Agent38 34.333333 0.666667
Agent39 40.666667 0.000000
Agent40 47.000000 0.000000
Manager5 Agent41 40.000000 0.000000
Agent42 34.333333 0.000000
Agent43 27.200000 0.000000
Agent44 47.000000 0.000000
Agent45 43.210526 0.184211
Agent46 39.086957 0.000000
Agent47 57.605263 0.052632
Agent48 60.666667 0.000000
Agent49 33.987013 0.012987

Accepted

In [33]:
#step back and start again, pivot managers
pd.pivot_table(data, index= 'Manager', values= "Accepted")
Out[33]:
Accepted
Manager
Manager1 42.308108
Manager2 46.318008
Manager3 40.088083
Manager4 37.967742
Manager5 44.121324
In [34]:
sns.set()
pd.pivot_table(data, index= 'Manager', values= "Accepted").plot(kind= 'bar')
plt.ylabel("Accepted")
Out[34]:
Text(0,0.5,'Accepted')
In [35]:
#pivot agents
pd.pivot_table(data, index= 'Agent Name', values= "Accepted")
Out[35]:
Accepted
Agent Name
Agent1 50.000000
Agent10 42.666667
Agent11 32.666667
Agent12 46.792208
Agent13 57.802632
Agent14 44.000000
Agent15 43.500000
Agent16 37.307692
Agent17 41.000000
Agent18 47.000000
Agent19 47.333333
Agent2 56.613333
Agent20 24.166667
Agent21 32.333333
Agent22 45.000000
Agent23 54.000000
Agent24 62.333333
Agent25 41.400000
Agent26 29.500000
Agent27 37.200000
Agent28 44.000000
Agent29 50.324675
Agent3 59.600000
Agent30 28.123288
Agent31 6.500000
Agent32 36.666667
Agent33 42.666667
Agent34 55.666667
Agent35 35.958333
Agent36 37.175676
Agent37 47.666667
Agent38 34.333333
Agent39 40.666667
Agent4 39.666667
Agent40 47.000000
Agent41 40.000000
Agent42 34.333333
Agent43 27.200000
Agent44 47.000000
Agent45 43.210526
Agent46 39.086957
Agent47 57.605263
Agent48 60.666667
Agent49 33.987013
Agent5 38.666667
Agent6 34.666667
Agent7 32.166667
Agent8 27.413333
Agent9 65.666667
In [36]:
sns.set()
pd.pivot_table(data, index= 'Agent Name', values= "Accepted").plot(figsize = (15,12), kind= 'barh')
plt.ylabel("Accepted")
Out[36]:
Text(0,0.5,'Accepted')

Rejected

In [37]:
manager = data["Manager"] == "Manager4"
rejectedHigh = data["Rejected"] > 0
#looking closer- this formula selects all cases where manager is manager4 and rejected is >0
manager4 = data[manager & rejectedHigh]
manager4
Out[37]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
111 Manager4 2019-07-11 Queue2 Agent36 Inbound 89 1.0 0.0 08:02:29 04:56:16 01:26:26 14:39:34 880.0 00:05:25 00:04:04 00:00:59 00:09:46 0
113 Manager4 2019-07-11 Queue2 Agent38 Inbound 92 2.0 4.0 08:10:08 04:39:54 01:17:37 14:36:19 876.0 00:05:20 00:03:30 00:00:51 00:09:08 0
648 Manager4 2019-07-22 Queue2 Agent34 Inbound 149 1.0 0.0 10:04:02 06:04:25 02:24:54 18:56:29 1136.0 00:04:03 00:04:06 00:01:00 00:07:26 22.74%
In [38]:
agentIndex = topRejects.set_index("Agent Name")
agentIndex
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-38-a52c1f1cc205> in <module>()
----> 1 agentIndex = topRejects.set_index("Agent Name")
      2 agentIndex

NameError: name 'topRejects' is not defined
In [ ]:
agentIndex.plot(kind = "bar")

Handle Time

In [39]:
data.head()
Out[39]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
0 Manager1 2019-07-10 Queue1 Agent2 Inbound 197 0.0 0.0 15:36:40 09:14:08 03:35:43 1 days 04:54:51 1734.85 00:04:45 00:03:17 00:01:08 00:08:48 34.57%
1 Manager1 2019-07-10 Queue1 Agent2 Internal 4 0.0 0.0 00:20:47 00:02:29 00:04:02 0 days 00:27:18 27.30 00:05:12 00:02:29 00:01:01 00:06:50 0.77%
2 Manager1 2019-07-10 Queue1 Agent2 Outbound 21 0.0 0.0 02:19:39 00:59:37 00:32:52 0 days 04:21:39 261.65 00:06:39 00:04:35 00:01:56 00:10:28 5.15%
3 Manager1 2019-07-10 Queue1 Agent8 Inbound 102 0.0 0.0 19:00:47 05:50:22 01:33:57 1 days 02:46:35 1606.58 00:11:11 00:03:54 00:00:56 00:15:18 42.38%
4 Manager1 2019-07-10 Queue1 Agent8 Internal 8 0.0 0.0 00:57:18 00:06:11 00:06:56 0 days 01:10:25 70.42 00:07:10 00:03:06 00:00:52 00:08:48 2.13%
In [40]:
def rank_performance(ht):
    if ht >= 500:
        return "Poor"
    elif ht < 500 and ht >= 10: 
        return "Satisfactory"
    else: 
        return "Stellar"
    #this equation assumes an AHT expectation for the week to be 500 minutes
In [41]:
bool = data["Handle Time Minutes"].apply(rank_performance).head()
bool
Out[41]:
0            Poor
1    Satisfactory
2    Satisfactory
3            Poor
4    Satisfactory
Name: Handle Time Minutes, dtype: object
In [42]:
data["Handle Time Minutes"].apply(rank_performance).value_counts()
Out[42]:
Satisfactory    635
Poor            323
Stellar          77
Name: Handle Time Minutes, dtype: int64
In [43]:
plt.style.use("ggplot")
data["Handle Time Minutes"].apply(rank_performance).value_counts().plot(kind = "bar")
Out[43]:
<matplotlib.axes._subplots.AxesSubplot at 0x127cffabcc0>
In [44]:
plt.style.use("ggplot")
data["Handle Time Minutes"].apply(rank_performance).value_counts().plot(kind = "pie", legend = True)
Out[44]:
<matplotlib.axes._subplots.AxesSubplot at 0x127d0084240>
In [45]:
aht = data.pivot_table(values = "Avg Handle Time", index = ["Date"], columns = "Manager", aggfunc = np.sum)
aht
Out[45]:
Manager Manager1 Manager2 Manager3 Manager4 Manager5
Date
2019-07-01 01:24:05 01:07:31 00:42:56 00:24:20 01:15:44
2019-07-02 00:50:42 00:59:37 00:42:22 00:25:33 01:21:06
2019-07-03 02:06:34 01:45:50 01:15:47 00:26:33 01:59:42
2019-07-04 00:57:03 01:11:52 00:38:32 00:28:30 01:21:35
2019-07-05 01:09:58 01:05:26 00:36:36 00:25:15 01:11:07
2019-07-06 00:50:33 00:55:59 00:34:07 00:26:05 01:12:36
2019-07-07 00:47:59 01:06:07 00:49:54 00:23:27 01:32:32
2019-07-08 00:46:57 01:00:10 00:35:26 00:24:03 01:21:18
2019-07-09 00:39:32 01:01:57 00:39:59 00:25:17 01:24:34
2019-07-10 01:02:20 01:19:17 00:53:10 00:55:16 01:49:35
2019-07-11 02:54:39 03:00:05 03:59:44 01:33:56 02:51:32
2019-07-12 02:04:11 01:33:46 00:45:01 01:04:14 01:41:38
2019-07-13 01:08:40 01:33:59 00:59:34 01:03:27 02:00:44
2019-07-14 02:35:17 02:19:11 01:41:00 02:02:18 02:50:33
2019-07-15 01:23:54 01:24:24 00:46:48 00:51:54 01:38:48
2019-07-16 01:04:24 01:16:06 00:55:38 00:27:44 01:35:53
2019-07-17 01:04:18 01:16:45 00:22:19 00:34:52 01:17:57
2019-07-18 01:18:12 01:18:42 00:48:25 00:30:43 01:17:54
2019-07-19 01:06:01 01:33:54 00:54:27 01:01:36 01:40:46
2019-07-20 01:10:40 01:07:04 00:46:38 00:28:45 01:25:59
2019-07-21 01:07:37 01:10:42 00:55:29 00:33:25 01:05:57
2019-07-22 03:27:08 03:41:27 03:52:33 03:23:30 02:50:23
2019-07-23 01:08:27 01:17:27 00:43:00 00:27:50 01:24:52
2019-07-24 01:21:56 01:16:53 00:45:47 00:28:52 01:18:40
In [46]:
aht.plot(figsize = (12,9), kind = "bar")
Out[46]:
<matplotlib.axes._subplots.AxesSubplot at 0x127d042cd68>
In [47]:
ahtMean = data.pivot_table(values = "Handle Time Minutes", index = ["Date"], columns = "Manager", aggfunc = "mean")
ahtMean
Out[47]:
Manager Manager1 Manager2 Manager3 Manager4 Manager5
Date
2019-07-01 436.500000 390.111111 323.666667 353.000000 408.333333
2019-07-02 350.333333 292.333333 347.000000 307.666667 414.111111
2019-07-03 219.363636 208.437500 194.000000 286.000000 206.562500
2019-07-04 481.000000 461.222222 306.500000 418.666667 490.666667
2019-07-05 379.833333 353.222222 232.666667 310.333333 358.888889
2019-07-06 344.666667 310.777778 320.400000 303.333333 321.444444
2019-07-07 266.000000 217.222222 209.833333 192.666667 182.333333
2019-07-08 417.333333 364.222222 325.833333 315.666667 376.000000
2019-07-09 432.333333 434.888889 379.666667 393.666667 363.888889
2019-07-10 649.175000 668.477778 536.888333 491.900000 576.860000
2019-07-11 439.684211 394.476190 453.769231 447.363636 402.100000
2019-07-12 641.166667 607.111111 465.000000 564.333333 599.250000
2019-07-13 451.250000 565.666667 524.333333 531.500000 550.250000
2019-07-14 336.636364 265.833333 262.181818 251.666667 262.863636
2019-07-15 449.666667 602.444444 486.166667 576.666667 568.416667
2019-07-16 503.666667 510.888889 385.166667 503.333333 492.222222
2019-07-17 514.166667 515.777778 583.000000 517.666667 564.444444
2019-07-18 533.666667 448.777778 364.333333 487.000000 526.333333
2019-07-19 511.833333 466.444444 486.833333 314.666667 450.666667
2019-07-20 540.666667 500.222222 361.333333 442.333333 421.666667
2019-07-21 461.166667 450.222222 381.166667 390.666667 410.625000
2019-07-22 368.259259 399.346154 316.000000 405.043478 388.150000
2019-07-23 476.833333 361.666667 287.666667 390.666667 434.111111
2019-07-24 530.166667 427.222222 462.666667 463.666667 489.444444
In [48]:
ahtMean.plot(figsize = (12,9), kind = "barh")
#manager2 has a higher aht than expected
Out[48]:
<matplotlib.axes._subplots.AxesSubplot at 0x127d05a76d8>
In [49]:
#To select a row based on multiple conditions you can use &:
array = ['7/10/2019', 'Manager2']
data.loc[(data['Date'] == "7/1/2019") & data['Manager'].isin(array)]
Out[49]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
755 Manager2 2019-07-01 Queue1 Agent12 Inbound 134 0.0 1.0 13:23:17 05:18:04 02:09:34 21:04:12 1264.0 00:06:00 00:02:39 00:01:00 00:09:22 0.300508152
756 Manager2 2019-07-01 Queue1 Agent12 Internal 1 0.0 0.0 00:03:43 00:00:00 00:01:01 00:04:44 5.0 00:03:43 00:00:00 00:01:01 00:04:44 0.001390404
757 Manager2 2019-07-01 Queue1 Agent12 Outbound 11 0.0 0.0 01:37:54 00:36:51 00:11:02 02:53:43 174.0 00:08:54 00:04:36 00:01:00 00:13:22 0.036624373
758 Manager2 2019-07-01 Queue1 Agent13 Inbound 182 0.0 0.0 09:21:28 03:15:05 02:59:18 15:56:49 957.0 00:03:05 00:01:45 00:00:59 00:05:10 0.21115443
759 Manager2 2019-07-01 Queue1 Agent13 Internal 6 0.0 0.0 00:20:52 00:00:00 00:06:01 00:26:53 27.0 00:03:29 00:00:00 00:01:00 00:04:29 0.007847463
760 Manager2 2019-07-01 Queue1 Agent13 Outbound 11 0.0 0.0 01:05:39 00:12:22 00:11:04 01:37:07 97.0 00:05:58 00:01:22 00:01:00 00:08:06 0.024689423
761 Manager2 2019-07-01 Queue1 Agent16 Inbound 72 0.0 0.0 06:53:39 01:41:01 01:11:04 10:10:57 611.0 00:05:45 00:02:28 00:00:59 00:08:15 0.158300592
762 Manager2 2019-07-01 Queue1 Agent16 Internal 11 0.0 0.0 00:31:50 00:01:52 00:09:43 01:00:49 61.0 00:02:54 00:00:56 00:00:58 00:05:04 0.012182366
763 Manager2 2019-07-01 Queue1 Agent16 Outbound 31 0.0 0.0 03:01:18 01:05:38 00:28:14 05:14:37 315.0 00:05:51 00:02:51 00:00:56 00:08:59 0.06938208
In [50]:
#To select rows where a column value does not equal a value, use !=, or use >=, or similar options:
data.loc[data['Avg Handle Time'] >= "00:30:00"]
Out[50]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
179 Manager1 2019-07-12 Queue1 Agent8 Internal 1 0.0 0.0 00:38:31 00:00:00 00:01:00 00:39:31 40.0 00:38:31 00:00:00 00:01:00 00:39:31 1.42%
180 Manager1 2019-07-12 Queue1 Agent8 Outbound 4 0.0 0.0 01:44:37 00:40:24 00:03:59 02:31:23 151.0 00:26:09 00:10:06 00:01:00 00:37:51 3.87%
432 Manager1 2019-07-18 Queue1 Agent8 Outbound 11 0.0 0.0 04:10:18 00:59:26 00:07:08 05:36:06 336.0 00:22:45 00:08:29 00:00:48 00:30:33 9.70%
852 Manager1 2019-07-03 Queue1 Agent8 Outbound 1 0.0 0.0 00:12:12 00:16:43 00:01:01 00:32:14 32.0 00:12:12 00:16:43 00:01:01 00:32:14 2.27%
In [51]:
#to create a subtotal
df_sub = data[["Agent Name","Rejected","Accepted"]].groupby('Agent Name').sum()
df_sub.head(10)
Out[51]:
Rejected Accepted
Agent Name
Agent1 0.0 150
Agent10 0.0 128
Agent11 0.0 98
Agent12 6.0 3603
Agent13 0.0 4393
Agent14 0.0 132
Agent15 0.0 261
Agent16 3.0 2910
Agent17 0.0 123
Agent18 0.0 282
In [52]:
data[(data['Date'] >='7/1/2019') & (data['Date'] <= '7/2/2019')].head()
Out[52]:
Manager Date Agent Group Agent Name Interaction Type Accepted Rejected Short Engage Time Hold Time Wrap Time Handle Time Handle Time Minutes Avg Engage Time Avg Hold Time Avg Wrap Time Avg Handle Time Engage Time %
749 Manager1 2019-07-01 Queue1 Agent2 Inbound 175 0.0 0.0 12:53:17 04:20:57 02:49:54 20:25:23 1225.0 00:04:25 00:01:42 00:00:59 00:06:53 0.288968056
750 Manager1 2019-07-01 Queue1 Agent2 Internal 1 0.0 0.0 00:01:47 00:01:57 00:01:01 00:04:45 5.0 00:01:47 00:01:57 00:01:01 00:04:45 0.000666413
751 Manager1 2019-07-01 Queue1 Agent2 Outbound 13 0.0 1.0 00:48:59 00:22:18 00:13:14 01:41:12 101.0 00:03:46 00:02:14 00:01:01 00:07:14 0.01830457
752 Manager1 2019-07-01 Queue1 Agent8 Inbound 67 1.0 0.0 12:16:16 04:15:09 01:02:53 17:45:45 1066.0 00:10:59 00:04:29 00:00:57 00:15:40 0.276293405
753 Manager1 2019-07-01 Queue1 Agent8 Internal 1 0.0 0.0 00:26:56 00:00:04 00:01:00 00:28:00 28.0 00:26:56 00:00:04 00:01:00 00:28:00 0.010107075