python随机分组函数 python随机分组并编号

Python分组

前言分组原理

成都创新互联是一家专注于成都网站设计、成都网站制作与策划设计,亳州网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:亳州等地区。亳州做网站价格咨询:13518219792

核心:

1.不论分组键是数组、列表、字典、Series、函数,只要其与待分组变量的轴长度一致都可以传入groupby进行分组。

2.默认axis=0按行分组,可指定axis=1对列分组。

对数据进行分组操作的过程可以概括为:split-apply-combine三步:

1.按照键值(key)或者分组变量将数据分组。

2.对于每组应用我们的函数,这一步非常灵活,可以是python自带函数,可以是我们自己编写的函数。

3.将函数计算后的结果聚合。

1 分组模式及其对象

1.1 分组的一般模式

三个要素:分组依据、数据来源、操作及其返回结果

df.groupby(分组依据)[数据来源].使用操作

1.2 分组依据的本质

1.3Groupby 对象

通过 ngroups 属性,可以访问分为了多少组:

通过 groups 属性,可以返回从 组名映射到 组索引列表的字典:

当 size 作为 DataFrame 的属性时,返回的是表长乘以表宽的大小,但在 groupby 对象上表示统计每个组的 元素个数:

通过 get_group 方法可以直接获取所在组对应的行,此时必须知道组的具体名字:

1.4 分组的三大操作

分组的三大操作:聚合、变换和过滤

2.聚合函数

2.1内置聚合函数

包括如下函数: max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod

2.2agg 方法

【a】使用多个函数

当使用多个聚合函数时,需要用列表的形式把内置聚合函数的对应的字符串传入,先前提到的所有字符串都是合法的。

【b】对特定的列使用特定的聚合函数

对于方法和列的特殊对应,可以通过构造字典传入 agg 中实现,其中字典以列名为键,以聚合字符串或字符串列表为值。

【c】使用自定义函数

在 agg 中可以使用具体的自定义函数,需要注意传入函数的参数是之前数据源中的列,逐列进行计算

【d】聚合结果重命名 如果想要对结果进行重命名,只需要将上述函数的位置改写成元组,元组的第一个元素为新的名字,第二个位置为原来的函数,包括聚合字符串和自定义函数

3 变换和过滤

3.1 变换函数与 transform 方法

变 换 函 数 的 返 回 值 为 同 长 度 的 序 列, 最 常 用 的 内 置 变 换 函 数 是 累 计 函 数:cum- count/cumsum/cumprod/cummax/cummin ,它们的使用方式和聚合函数类似,只不过完成的是组内 累计操作。

3.2 组索引与过滤

过滤在分组中是对于组的过滤,而索引是对于行的过滤

组过滤作为行过滤的推广,指的是如果对一个组的全体所在行进行统计的结果返回 True 则会被保留,False 则该组会被过滤,最后把所有未被过滤的组其对应的所在行拼接起来作为 DataFrame 返回。

在 groupby 对象中,定义了 filter 方法进行组的筛选,其中自定义函数的输入参数为数据源构成的 DataFrame 本身,在之前例子中定义的 groupby 对象中,传入的就是 df[['Height', 'Weight']] ,因此所有表方法和属性 都可以在自定义函数中相应地使用,同时只需保证自定义函数的返回为布尔值即可。

4 跨列分组

4.1 apply 的引入

4.2 apply 的使用

在设计上,apply 的自定义函数传入参数与 filter 完全一致,只不过后者只允许返回布尔值

【a】标量情况:结果得到的是 Series ,索引与 agg 的结果一致

【b】Series 情况:得到的是 DataFrame ,行索引与标量情况一致,列索引为 Series 的索引

【c】DataFrame 情况:得到的是 DataFrame ,行索引最内层在每个组原先 agg 的结果索引上,再加一层返 回的 DataFrame 行索引,同时分组结果 DataFrame 的列索引和返回的 DataFrame 列索引一致

Python随机平均分组模型建立怎么写

可以尝试使用k-means clustering:

import scipy.cluster.vq as vq

import collections

import numpy as np

def auto_cluster(data,threshold=0.1,k=1):

# There are more sophisticated ways of determining k

# See

data=np.asarray(data)

distortion=1e20

while distortionthreshold:

codebook,distortion=vq.kmeans(data,k)

k+=1

code,dist=vq.vq(data,codebook)

groups=collections.defaultdict(list)

for index,datum in zip(code,data):

groups[index].append(datum)

return groups

np.random.seed(784789)

N=20

weights=100*np.random.random(N)

groups=auto_cluster(weights,threshold=1.5,k=N//5)

for index,data in enumerate(sorted(groups.values(),key=lambda d: np.mean(d))):

print('{i}: {d}'.format(i=index,d=data))

上面的代码生成N个权重的随机序列.

50个人怎么随机分组python

1、首先在python程序上输入总人数50人(N),和所需要的分组数n,即可进行随机分组。

2、如果N不是n的整数倍,则n个小组中的人数会不相同。以上就是50个人在python程序随机分组的方法。

randint在python中的意思

python中的randint用来生成随机数,在使用randint之前,需要调用random库。其表达是为random.randint(x,y),参数x和y代表生成随机数的区间范围。

random() 函数命名来源于英文单词random(随机)。randint是random + integer拼接简写而成,代表随机一个整数。

Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。

函数randint的使用

1、OUT = RANDINT

产生一个“ 0 ”或“ 1 ”等概率。

2、OUT = RANDINT(M)

生成的M 矩阵的随机二进制数字,“ 0 ”和“ 1 ”出现的概率均等。

3、OUT = RANDINT(M,N)

生成的(M,N) 矩阵的随机二进制数字,“ 0 ”和“ 1 ”出现的概率均等。

4、OUT = RANDINT(M,N,RANGE)

生成的(M,N) 矩阵的随机二进制数字,RANGE范围可以是标量或向量。

标量:为正的话,取值为[0,RANGE-1] ,为负的话,取值为 [RANGE+1, 0]。

向量:取值为[RANGE(1), RANGE(2)]。

5、OUT = RANDINT(M,N,RANGE,STATE)

resets the state of RAND to STATE。


新闻名称:python随机分组函数 python随机分组并编号
网页网址:http://cdiso.cn/article/docejsd.html

其他资讯