gpt4 book ai didi

python - 如何按范围对数据进行分组?

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

我有以下 pandas 数据框(这只是一个小摘录):

GROUP   AVG_PERCENT_EVAL_1  AVG_PERCENT_NEGATIVE    AVG_TOTAL_WAIT_TIME AVG_TOTAL_SERVICE_TIME
AAAAA 19 11.000000 25.000000 163.000000
AAAAA 22 2.000000 146.364198 332.761317
AAAAA 23 0.500000 44.068225 302.708639
AAAAA 24 1.000000 122.672215 322.359795
AAAAA 26 1.000000 143.594896 317.940989
BBBBB 18 1.000000 121.225692 319.292226
BBBBB 19 1.000000 40.054707 201.096152
BBBBB 21 0.333333 29.221458 207.142059
BBBBB 27 2.000000 103.796290 313.685358

我需要使 AVG_PERCENT_EVAL_1 更加连续,这意味着,而不是精确值,例如181920 等,我想输入范围,例如18-2021-23,依此类推,直到 40 左右。

数据应按 GROUP 分组,然后对每个数据取 AVG_PERCENT_NEGATIVEAVG_TOTAL_WAIT_TIMEAVG_TOTAL_SERVICE_TIME 的平均值相应的范围。

重要提示:我们采用 18-20 范围。组 AAA 具有 AVG_PERCENT_EVAL_1 等于 19 的相应条目,而组 BBBBB 有两个条目属于此范围范围 - 1819AVG_PERCENT_NEGATIVEAVG_TOTAL_WAIT_TIMEAVG_TOTAL_SERVICE_TIME 的值应为以下值:

GROUP   AVG_PERCENT_RANGE   AVG_PERCENT_NEGATIVE    AVG_TOTAL_WAIT_TIME AVG_TOTAL_SERVICE_TIME
AAAAA 18-20 11.00 25.00 163.000000
BBBBB 18-20 1.00 80.64 260,19

我知道如何按具体列对数据进行分组,然后使用 agg 计算“平均值”或“计数”。但是,在这种情况下,我不知道如何为 AVG_PERCENT_EVAL_1 创建范围。另外,我不知道如何定义缺少的条目不应被视为 0。例如,在上面的示例中,没有关于 AAAAA 的信息,其中 AVG_PERCENT_EVAL_1 等于 1820,因此我只想获取 19 的值 而不1820< 的 0 值进行平均.

最佳答案

步骤:

1) 使用 pd.cut()AVG_PERCENT_EVAL_1 合并到适当的标签中通过指定 bin 序列。

指定 include_lowest=True 将处理左端点 "[" 的包容性,而 right=False 将使右端点成为开区间 ")".

2)使用返回的类别,根据所需的要求重新标记它们。

3) 执行groupby,将GROUP和新计算的分箱范围作为分组键,在删除AVG_PERCENT_EVAL_1后聚合所有现有列的平均值> 来自他们。

<小时/>

分箱部分:

step=3
kwargs = dict(include_lowest=True, right=False)
bins = pd.cut(df.AVG_PERCENT_EVAL_1, bins=np.arange(18,40+step,step), **kwargs)
labels = [(str(int(cat[1:3])) + "-" + str(int(cat[5:7])-1)) for cat in bins.cat.categories]
bins.cat.categories = labels

分配和groupby.agg():

df = df.assign(AVG_PERCENT_RANGE=bins).drop("AVG_PERCENT_EVAL_1", axis=1)
df.groupby(['GROUP', 'AVG_PERCENT_RANGE'], as_index=False).agg('mean')

enter image description here

关于python - 如何按范围对数据进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956042/

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