gpt4 book ai didi

python - 按因素分组并返回其他列的第二低值

转载 作者:行者123 更新时间:2023-11-28 20:55:28 38 4
gpt4 key购买 nike

我想按 zipcode 列中的值对该数据框进行分组,并在另一个(称为费率)列中返回 second lowest 费率或 最低 速率或最大 速率。

例如,从这个 df:

zipcode state   county_code name    rate_area_x plan_id metal_level rate    rate_area_y
36749 AL 1001 Autauga 11 52161YL6358432 Silver 245.82 6
36749 AL 1001 Autauga 11 01100AO4222848 Silver 271.77 5
36749 AL 1001 Autauga 11 24848KC5063721 Silver 264.84 1
36749 AL 1001 Autauga 11 89885YK0256118 Silver 269.11 8
36749 AL 1001 Autauga 11 65392ON5819785 Silver 305.02 12
30165 AL 1019 Cherokee 13 52161YL6358432 Silver 245.82 6
30165 AL 1019 Cherokee 13 01100AO4222848 Silver 271.77 5
30165 AL 1019 Cherokee 13 24848KC5063721 Silver 264.84 1
30165 AL 1019 Cherokee 13 89885YK0256118 Silver 269.11 8
30165 AL 1019 Cherokee 13 65392ON5819785 Silver 305.02 12
30165 AL 1019 Cherokee 13 90884WN5801293 Silver 323.25 2
30165 AL 1019 Cherokee 13 79113BU1788705 Silver 344.81 7

我希望:

zipcode rate
36749 245.82
30165 245.82

在 R 中,我会这样做以获得每个邮政编码组的最小值:

grouped_df <- df %>%
group_by(zipcode) %>%
summarise(rate = min(rate))

但是如何使用 Python 的 Pandas 获取第二低的速率值?

最佳答案

编辑:我给你最小的和第二小的,供你在一般情况下使用。但是,正如@WenYoBen 在评论中提到的,您可能只想要倒数第二的。如果是这种情况,您只需链接 reset_indexdropdrop_duplicates 以获得最小值或第二小值,如下所示:

最小化:

df.groupby('zipcode').rate.nsmallest(2).reset_index().drop('level_1',1) \
.drop_duplicates(subset=['zipcode'])

Out[2108]:
zipcode rate
0 30165 245.82
2 36749 245.82

获取第二小:

df.groupby('zipcode').rate.nsmallest(2).reset_index().drop('level_1',1) \
.drop_duplicates(subset=['zipcode'], keep='last')

Out[2109]:
zipcode rate
1 30165 264.84
3 36749 264.84

原创:

groupby.nsmallest 将为您提供每组中最小的和第二小的

df.groupby('zipcode').rate.nsmallest(2)

Out[2083]:
zipcode
30165 5 245.82
7 264.84
36749 0 245.82
2 264.84
Name: rate, dtype: float64

关于python - 按因素分组并返回其他列的第二低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56745136/

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