gpt4 book ai didi

python - 获取最佳性能列的不同成员之间的比率

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:41 24 4
gpt4 key购买 nike

我有 df:

    ClientHostID    LoginDaysSum
0 70 4
1 70 2
2 71 11
3 71 2
4 79 37
5 79 1
6 79 1
7 80 18
8 80 6
9 87 29
10 87 1
11 88 88
12 88 2
13 88 1
14 88 1
15 88 1
16 88 1

已排序:

local_input_list.sort_values(['ClientHostID', 'LoginDaysSum'], ascending=[True, False], inplace=True)

我想要的是让每个 ClientHostID 获得他最大的 LoginDaysSum 与他的第二大 LoginDaysSum 之间的比率(结果将是):

    ClientHostID    ratio
0 70 2
1 71 5.5
2 79 37
3 80 3
4 87 29
5 88 22

我设法得到它:

 df = df.groupby(['ClientHostID'], sort=False)['LoginDaysSum'].apply(lambda x: x.iloc[0] / x.iloc[1]).reset_index(name='ratio')

但问题是使用 apply 对性能影响太大...

我想过做这样的事情:

largest = df.groupby(['ClientHostID']).first()
drop_largest = df.drop(largest)
second_largest = drop_largest.groupby(['ClientHostID']).first()
df['ratio'] = largest['LoginDaysSum'] / second_largest['LoginDaysSum']

当我尝试这个时,我到处都是错误,所以这完全是伪造的,只是为了获得我正在努力完成的事情的一般氛围。

如果有任何意见,我将不胜感激,谢谢,

最佳答案

您可以将初始 df 剪切到感兴趣的前 2 行,因为它已排序,然后执行以下操作:

In [136]:
stripped = df.groupby('ClientHostID').head(2)
stripped

Out[136]:
ClientHostID LoginDaysSum
0 70 4
1 70 2
2 71 11
3 71 2
4 79 37
5 79 1
7 80 18
8 80 6
9 87 29
10 87 1
11 88 88
12 88 2

然后 groupby 在减少的 df 上,只是 div firstlast:

In [138]:   stripped.groupby('ClientHostID').first().div(stripped.groupby('ClientHostID').last())
Out[138]:
LoginDaysSum
ClientHostID
70 2.0
71 5.5
79 37.0
80 3.0
87 29.0
88 44.0

然后您可以调用 reset_index 并将调用链接到 rename 以获得所需的输出:

In [140]:
stripped.groupby('ClientHostID').first().div(stripped.groupby('ClientHostID').last()).reset_index().rename(columns={'LoginDaysSum':'ratio'})

Out[140]:
ClientHostID ratio
0 70 2.0
1 71 5.5
2 79 37.0
3 80 3.0
4 87 29.0
5 88 44.0

关于python - 获取最佳性能列的不同成员之间的比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41737930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com