我正在尝试使用用户@Garret提供的修改后的代码分析以下数据集中的几个内容,但是我遇到了一些问题。
数据集有一列显示客户是由现场代理还是自动机器进行操作。 我正在尝试获取同步呼叫之间的差异,其中成员首先连接到代理,然后没有连接。通话必须具有相同的呼叫原因,并且在时间戳方面必须放置在初始呼叫之后。此外,在之间可以有其他原因的呼叫。
这是数据集:
我期望得到的输出如下:
我得到的输出是:
注意:我希望解决方案能够灵活,这样我就可以分析一些不同的情况,例如:
数据集有一列显示客户是由现场代理还是自动机器进行操作。 我正在尝试获取同步呼叫之间的差异,其中成员首先连接到代理,然后没有连接。通话必须具有相同的呼叫原因,并且在时间戳方面必须放置在初始呼叫之后。此外,在之间可以有其他原因的呼叫。
这是数据集:
data = [['bob13', 1, 'returns','automated',' 2019-08-18 10:12:00'],['bob13', 0, 'returns','automated',' 2019-03-18 10:12:00'],\
['bob13', 8, 'returns','agent',' 2019-04-18 10:15:00'],['rach2', 2, 'shipping','automated',' 2019-04-19 10:15:00'],\
['bob13', 0, 'returns','agent',' 2019-05-18 11:12:00'],['rach2', 0, 'shipping','agent',' 2019-04-18 11:15:00'],\
['bob13', 3, 'returns','agent',' 2019-02-18 10:12:00'],['rach2', 8, 'shipping','agent',' 2019-05-19 10:15:00'],\
['rach2', 7, 'shipping','automated',' 2019-06-19 10:15:00'],['roy', 4, 'exchange','agent','2019-03-26 17:36:00'],\
['roy', 5, 'exchange','automated','2019-01-28 09:48:00']]
df = pd.DataFrame(data, columns = ['member_id', 'survey_score','call_reason','connection','time_stamp'])
df.sort_values(by=['time_stamp']).head(20)
member_id survey_score call_reason connection time_stamp
6 bob13 3 returns agent 2019-02-18 10:12:00
1 bob13 0 returns automated 2019-03-18 10:12:00
2 bob13 8 returns agent 2019-04-18 10:15:00
5 rach2 0 shipping agent 2019-04-18 11:15:00
3 rach2 2 shipping automated 2019-04-19 10:15:00
4 bob13 0 returns agent 2019-05-18 11:12:00
7 rach2 8 shipping agent 2019-05-19 10:15:00
8 rach2 7 shipping automated 2019-06-19 10:15:00
0 bob13 1 returns automated 2019-08-18 10:12:00
10 roy 5 exchange automated 2019-01-28 09:48:00
9 roy 4 exchange agent 2019-03-26 17:36:00
我期望得到的输出如下:
member_id call_reason automated agent score differential
bob13 returns 0 3 -3
bob13 returns 1 0 1
rach2 shipping 2 0 2
rach2 shipping 7 8 -1
基本上,我们只是想了解在呼叫原因和连接方面两个调用之间的差异。第一个调用是当成员连接到代理时,第二个调用必须在第一个调用之后,基于时间戳,必须是同样的原因,并且必须连接到自动化系统。如果在其间有为其他原因放置的通话,则没有问题。我尝试的代码如下:
grp = df.query('connection=="automated"').\
groupby(['member_id', 'call_reason'])
df['OutId'] = grp.time_stamp.transform(lambda x: x.rank())
df.head(10)
grp = df.groupby(['member_id', 'call_reason'])
df['Id'] = grp.OutId.transform(lambda x: x.bfill())
df.head(10)
agent = df.query('connection=="agent"').\
groupby(['member_id', 'call_reason', 'Id']).survey_score.last()
automated = df.query('connection=="automated"').\
groupby(['member_id', 'call_reason', 'Id']).survey_score.last()
ddf = pd.concat([automated, agent], axis=1,
keys=['automated', 'agent'])
ddf['score_differential'] = ddf.automated - ddf.agent
我得到的输出是:
ddf.dropna().head(10)
automated agent score_differential
member_id call_reason Id
rach2 shipping 2.0 7 8.0 -1.0
roy exchange 1.0 5 4.0 1.0
再次运行,预期输出应为:
member_id call_reason automated agent score differential
bob13 returns 0 3 -3
bob13 returns 1 0 1
rach2 shipping 2 0 2
rach2 shipping 7 8 -1
注意:我希望解决方案能够灵活,这样我就可以分析一些不同的情况,例如:
- 仅自动化呼叫之间的差异
- 仅与代理人连接的呼叫之间的差异
- 当初始呼叫连接到代理时以及在第二个呼叫中无论连接类型如何之间的差异
bob13
只有1个自动化和3个代理。根据您的示例,应该是2
和3
吗?而且我不明白score_diff
到底是什么,因为我看不到第3行(bob13 8
)适合输出。 - Quang Hoangbob13
的输出行返回0 3 -3
是与数据集中以下两个通话相关的:6 bob13 3 returns agent 2019-02-18 10:12:00
和1 bob13 0 returns automated 2019-03-18 10:12:00
。 - GlupiDebil