假设我们有问题跟踪日志,我们想找出问题所有者(记录最多时间问题的人)
所以我们有一些样本数据:
df = pd.DataFrame([
[1, 10, 'John'],
[1, 20, 'John'],
[1, 30, 'Tom'],
[1, 10, 'Bob'],
[2, 25, 'John'],
[2, 15, 'Bob']], columns = ['IssueKey','TimeSpent','User'])
作为输出,我们需要这样的东西:
issues_owners = pd.DataFrame([
[1, 30, 'John'],
[1, 30, 'Tom'],
[2, 25, 'John']], columns = ['IssueKey','TimeSpent','User'])
1
的所有者,因为他们都花了30分钟。1
2
我提出的感觉非常恶心(我对Python比较陌生):
df = df.groupby(['IssueKey', 'User']).sum().reset_index()
maxTimesPerIssue = df.groupby('IssueKey')['TimeSpent'].max().reset_index()
maxTimesPerIssue = dict(zip(maxTimesPerIssue['IssueKey'], maxTimesPerIssue['TimeSpent']))
df['MaxTimePerIssue'] = [maxTimesPerIssue[key] for key in df['IssueKey']]
df = df[df.MaxTimePerIssue == df.TimeSpent]
df = df.drop(columns=['MaxTimePerIssue'])
我不喜欢我的Python代码:
maxTimesPerIssue
出现在处理df
中断思维过程(或管道)的过程中maxTimesPerIssue
本身的创建有点混乱MaxTimePerIssue
df
reset_index()
,list()
,dict()
,列表推导,删除列>,这绝对不如C#版本那么容易解释LI>
醇>
有人可以帮我清理吗?
答案 0 :(得分:1)
groupby
的某些内容适用于您的数据:
i = df.groupby(['IssueKey', 'User']).TimeSpent.sum()
j = i.groupby(level=0).transform('max')
i[i == j].reset_index()
IssueKey User TimeSpent
0 1 John 30
1 1 Tom 30
2 2 John 25