Pandas中的GroupBy和Cut

3

我将尝试对一组事物进行分组,并根据最小、最大和平均值动态地在组内执行削减操作(针对最小值和最大值)。

我的数据集类似于以下内容:

Country     Value
Uganda       210
Kenya        423
Kenya        315 
Tanzania     780 
Uganda       124
Uganda       213
Tanzania     978 
Kenya        524 

我希望你能翻译出每个值所在的范围,是高于还是低于中间值:
Country      Value        Range
Uganda        210        (168.5, 213)
Uganda        124        (124, 168.5)
Uganda        213        (168.5, 213)
Kenya         423        (419.5, 524)
Kenya         315        (315, 419.5)
Kenya         524        (419.5, 524)
Tanzania      780        (780, 879)
Tanzania      978        (879, 980) 

如果我使用循环迭代每个组,我就能够实现这一点。我也能够基于整个数据集的最小值和最大值来进行切割,但无法针对单个组进行切割。不过,我想知道是否可以使用pandas在一两行代码中完成,而不是使用循环。


预期结果是什么? - Zanshin
第二个表格是预期的结果。 - Ankur Sinha
好的,第二个怎么排序? - Zanshin
只是一个分组,不需要任何排序。这只是一个例子。我主要需要的是所涉及值所属的范围。 - Ankur Sinha
你能展示一下for循环吗?我无法确定你需要什么。 - Zanshin
2个回答

5
这是我的做法:
df['range'] = df.groupby('country')[['value']].transform(lambda x: pd.cut(x, bins = 2).astype(str))

可能是一个重复的问题,不过请看一下我之前发的这个问题;https://stackoverflow.com/questions/41303633/conditionally-binning - Zanshin

4
尝试这个:
data['Range'] = data.groupby('Country').Value.apply(pd.cut, bins=2)

我已经弄清楚了。不过,我也检查了你的解决方案,它也有效。我也会发布我的答案。 - Ankur Sinha
1
这个解决方案给了我 ValueError: cannot reindex from a duplicate axis - DaniTeba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接