当前位置: 首页 > 知识库问答 >
问题:

如何在分组结果中添加间隔

谢泉
2023-03-14

我需要按年份地点价格的间隔(步长为5)对数据进行分组。对于每个组,我要估计中位数水平

df = 
year   place   price   level
1994   AAA     90      1
1993   BBB     89      1
1994   AAA     91      2
1998   AAA     92      3
1990   BBB     80      0
1994   AAA     90      1
1990   BBB     81      0
1991   BBB     92      1

我可以分组数据并计算级别的中值,但是我不知道如何添加price的间隔:

grouped_df = df.groupby(["year","place"]).agg({'level':'median'}).reset_index()

正确的grouped_df应该结构如下(数字可能不同,这只是数据结构的一个例子):

grouped_df = 

year   place   price_min   price_max   level
1990   AAA     80          85          1
...

更新:

最终结果应该是这样的。因此,基本上,price\u minprice\u max分别是上下限:

   year_ place_  level_median price_min price_max
0   1990    BBB             0  75       80
1   1991    BBB             1  80       85
2   1993    BBB             1  85       90
3   1994    AAA             1  85       90
4   1998    AAA             3  90       95

共有2个答案

陶俊晤
2023-03-14

我想如果你想把价格分组在5的范围内,我会使用pd.cut来创建范围,然后分组。

df.groupby(['year','place',pd.cut(df.price,[79,86,91,96,101],labels=['80-85','86-90','91-95','96-100'])]).agg({'price':['min','max'],'level':'median'})

输出:

                 price      level
                   min max median
year place price                 
1990 BBB   80-85    80  81      0
1991 BBB   91-95    92  92      1
1993 BBB   86-90    89  89      1
1994 AAA   86-90    90  91      1
1998 AAA   91-95    92  92      3

让我们试试这个:

df2 = df.groupby(['year',
                  'place',
                   pd.cut(df.price,[i for i in range(np.min(df.price)-5,np.max(df.price)+5,5)])]
                ).agg({'price':['min','max'],'level':'median'})
钦楚青
2023-03-14

我认为您需要聚合剪切

但如果相同的输出需要其他类别-添加5。不理想,但列被转换为int,并添加了mask5,然后转换为category返回。

bins = range(0, df['price'].max() + 5, 5)
labels_low = range(0, df['price'].max(), 5)

df2['price_min'] = pd.cut(df2['price_min'], bins=bins, labels=labels_low)
df2['price_max'] = pd.cut(df2['price_max'], bins=bins, labels=labels_low).astype(int)
mask = df2['price_min'] == df2['price_max']
df2['price_max'] = df2['price_max'].mask(mask, df2['price_max'] + 5).astype('category')

print (df2)
   year_ place_  level_median  price_min  price_max
0   1990    BBB             0         75         80
1   1991    BBB             1         90         95
2   1993    BBB             1         85         90
3   1994    AAA             1         85         90
4   1998    AAA             3         90         95

不带分类的解决方案:

df2['price_min'] = pd.cut(df2['price_min'], bins=bins, labels=labels_low).astype(int)
df2['price_max'] = pd.cut(df2['price_max'], bins=bins, labels=labels_low).astype(int)
mask = df2['price_min'] == df2['price_max']
df2['price_max'] = df2['price_max'].mask(mask, df2['price_max'] + 5)
print (df2)
   year_ place_  level_median  price_min  price_max
0   1990    BBB             0         75         80
1   1991    BBB             1         90         95
2   1993    BBB             1         85         90
3   1994    AAA             1         85         90
4   1998    AAA             3         90         95
 类似资料:
  • 问题内容: 我将书名存储在elasticsearch中,它们都属于许多商店。像这样: 如何获取所有书籍并按标题分组…以及每组一个结果(一组具有相同标题的行,这样我就可以获得所有ID和存储)? 基于上面的数据,我想获得两个具有所有ID的结果并将其存储在其中。 预期成绩: 问题答案: 在Elasticsearch中无法找到您想要的东西,至少在当前版本(1.1)中无法实现。 对于此功能,还有很长的悬而未

  • 我想将结果添加到resultset,并使用table显示结果,这是我的java代码 错误显示"未找到列'Janunary'。" 很抱歉我没有获得足够的声誉,所以我将存储过程的结果写如下。 查询代码:

  • 我的任务是用hibernate的数据值填充prime faces数据表。我们可以通过这个查询获取表中的所有记录 将从表雇员中获取所有记录,雇员字段有两个字段名称,以及将其转换为列表的Hibernate查询 列表=查询。list();我想将其转换为数组列表,其中包含两个字段name,age和hibernate中的所有对象 然后用 有人能举例说明吗

  • 我需要添加一些空间开始的第一项和结束的最后一项的回收,所以他们可以滚动到屏幕的边缘(因为他们不能与回收器视图的边距或填充) 问题是项目之间的间距应该不同,所以我不能只是将这个“空间”添加到项目布局中。现在,我正试图将ItemEdition添加到我的回收器中,但结果就是这样: 在我触摸它之前,行间距随机出现:随机行间距 然后,当我滚动到最后并返回时,所需的空间出现在屏幕上适合的最后一项之后,而不是在

  • 我已经为我的城市选项卡创建了ajax代码,以显示来自ajax的相应城市数据。 我使用了以下代码: 下面是我要在ajax内容上加载的div 现在我已经使用以下jquery插件对我的项目进行分页http://cssglobe.com/post/9801/easy-paginate-jQuery-plugin-for-pagination 但是当我在ajax响应中使用它时,分页不起作用。 你能帮我一下我