我有一个数据框,我尝试以某种方式进行排序。使用Python中的Pandas Dataframes对数据进行排序
输入:
CompanyName count assignee_name CallType recvd_dttm
Company3 4 Jill Machine1 8/28/2015 13:46
Company3 4 Jill Machine1 8/27/2015 13:26
Company3 4 Jack Machine2 8/27/2015 11:46
Company3 4 Jill Machine1 8/25/2015 9:56
Company2 3 Brad Machine1 8/29/2015 12:43
Company2 3 Lee Machine2 8/28/2015 13:44
Company2 3 Lee Machine1 8/22/2015 19:45
Company1 2 Lee Machine1 8/12/2015 14:47
Company1 2 Lee Machine2 8/11/2015 13:44
Company0 1 Tracy Machine2 8/31/2015 13:32
我想要什么:
Company3 Company2 Company1 Company0
4 3 2 1
Jill Lee Lee Tracy
Machine1 Machine1 Machine1 Machine2
8/28/2015 8/29/2015 8/12/2015 8/31/2015
它应该输出的公司名称中的顺序谁在数据框中显示了大部分。然后它应该显示拿起MOST电话的人。那么CallType和recvd_dttm的信息应该是最新的信息。
我用这个:
mode = (lambda ts: ts.value_counts(sort=True).index[0]
if len(ts.value_counts(sort=True)) else None)
cols = df['CompanyName'].value_counts().index
df = df.groupby('CompanyName')[['count','assignee_name', 'CallType', 'receiveddate']].agg(mode).T.reindex(columns=cols)
它按公司名称正确输出和计数,但选择一个随机呼吁其他信息,而不是最近的电话。
我也在考虑使用类似df.groupby(['CompanyName','count']).agg(lambda x:x.value_counts().index[0])
但我得到UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 21285: ordinal not in range(128)
错误。
是的!这让我更靠近一步。接下来的事情是让assignee_name成为该公司名称显示最多的名称。你会知道如何得到它吗? – jenryb
就像在这种情况下一样,对于公司2而言,李会出现,而不是布拉德,因为他出现在公司2的电话中更多。 – jenryb
@jenryb我已编辑帖子以解决该问题。 :-) –