使用熊猫将值分成最小大小的组

原始的尖叫

我正在尝试将观察样本分成n个离散的组,然后将这些组合并,直到每个子组最少有6个成员。到目前为止,我已经生成了bin,并将DataFrame分组到其中:

# df is a DataFrame containing 135 measurments
bins = np.linspace(df.heights.min(), df.heights.max(), 21)
grp = df.groupby(np.digitize(df.heights, bins))
grp.size()

1      4
2      1
3      2
4      3
5      2
6      8
7      7
8      6
9     19
10    12
11    13
12    12
13     7
14    12
15    12
16     2
17     3
18     6
19     3
21     1

因此,我看到我需要组合第1-3、3-5和16-21组,而其他组则保持不变,但是我不知道如何以编程方式进行操作。

阿尔瓦罗·富恩特斯

你可以这样做:

df = pd.DataFrame(np.random.random_integers(1,200,135), columns=['heights'])
bins = np.linspace(df.heights.min(), df.heights.max(), 21)
grp = df.groupby(np.digitize(df.heights, bins))
sizes = grp.size() 

def f(vals, max):
    sum = 0
    group = 1
    for v in vals:
        sum += v
        if sum <= max:
            yield group
        else:
            group +=1
            sum = v
            yield group

#I've changed 6 by 30 for the example cause I don't have your original dataset
grp.size().groupby([g for g in f(sizes, 30)])

而且,如果您这样做,print grp.size().groupby([g for g in f(sizes, 30)]).cumsum()您将看到累积总和按预期分组。

另外,如果要将原始值分组,可以执行以下操作:

dat = np.random.random_integers(0,200,135)
dat = np.array([78,116,146,111,147,78,14,91,196,92,163,144,107,182,58,89,77,134,
83,126,94,70,121,175,174,88,90,42,93,131,91,175,135,8,142,166,
1,112,25,34,119,13,95,182,178,200,97,8,60,189,49,94,191,81,
56,131,30,107,16,48,58,65,78,8,0,11,45,179,151,130,35,64,
143,33,49,25,139,20,53,55,20,3,63,119,153,14,81,93,62,162,
46,29,84,4,186,66,90,174,55,48,172,83,173,167,66,4,197,175,
184,20,23,161,70,153,173,127,51,186,114,27,177,96,93,105,169,158,
83,155,161,29,197,143,122,72,60])
df = pd.DataFrame({'heights':dat})
bins = np.digitize(dat,np.linspace(0,200,21))
grp = df.heights.groupby(bins)

m = 15 #you should put 6 here, the minimun
s = 0
c = 1
def f(x):
    global c,s
    res = pd.Series([c]*x.size,index=x.index)
    s += x.size
    if s>m:
        s = 0
        c += 1
    return res
g = grp.apply(f)
print df.groupby(g).size()

#another way of doing the same, just a matter of taste

m = 15 #you should put 6 here, the minimun
s = 0
c = 1
def f2(x):
    global c,s
    res = [c]*x.size #here is the main difference with f
    s += x.size
    if s>m:
        s = 0
        c += 1
    return res

g = grp.transform(f2) #call it this way
print df.groupby(g).size()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用熊猫将值分成最小大小的组

来自分类Dev

Python 3.7,将集合分成几组,但组的大小最小

来自分类Dev

将向量分成预定义大小的组

来自分类Dev

R:如何根据最小距离将值向量分成固定数量的组?

来自分类Dev

如何将熊猫数据框分成峰组

来自分类Dev

将SQL结果分成最大大小为n的组

来自分类Dev

如何使用dplyr的setdiff将数据分成两组

来自分类Dev

大熊猫:按组大小和数据值过滤

来自分类Dev

将数据分成子组

来自分类Dev

熊猫将列分成多个

来自分类Dev

将值分成几列

来自分类Dev

将数值替换为组最小值

来自分类Dev

将数值替换为组最小值

来自分类Dev

熊猫中的分层组大小

来自分类Dev

将熊猫组中的值堆叠到新列中

来自分类Dev

将熊猫数据框值组转换为多个列表

来自分类Dev

熊猫按列分组,找到多个列的最小值,并为组中的最小值行创建新列

来自分类Dev

将每个组的每个值与该组的最小值进行比较

来自分类Dev

将HTML元素分成2组

来自分类Dev

将随机生成的ID分成相等的组

来自分类Dev

将列表分成不固定的组?

来自分类Dev

将动态范围随机分成相等的组

来自分类Dev

使用colgroup和col元素将表分成有边界的组

来自分类Dev

使用正则表达式从右到左将数字分成三组

来自分类Dev

熊猫数据框选择基数最小的组

来自分类Dev

熊猫上一组最小/最大

来自分类Dev

如何使用Paint.NET将图形分成大小不等的块?

来自分类Dev

使用熊猫将值映射到字典

来自分类Dev

使用组的最小/最大日期为熊猫添加组的缺失日期