[英]Divide a group into n and add block numbers for each group in python
我有下表:
A栏 | B栏 |
---|---|
一个 | 12 |
乙 | 32 |
C | 44 |
D | 76 |
乙 | 99 |
F | 123 |
G | 65 |
H | 87 |
我 | 76 |
Ĵ | 231 |
ķ | 80 |
l | 55 |
米 | 27 |
n | 67 |
我想将此表划分为“n”(n = 4,此处为)组,并添加另一列与组名。 output 应如下所示:
A栏 | B栏 | C栏 |
---|---|---|
一个 | 12 | 1 |
乙 | 32 | 1 |
C | 44 | 1 |
D | 76 | 1 |
乙 | 99 | 2 |
F | 123 | 2 |
G | 65 | 2 |
H | 87 | 2 |
我 | 76 | 3 |
Ĵ | 231 | 3 |
ķ | 80 | 3 |
l | 55 | 4 |
米 | 27 | 4 |
n | 67 | 4 |
我这么努力是为了什么?
TGn = 4
idx = set(df.index // TGn)
treatment_groups = [i for i in range(1, n+1)]
df['columnC'] = (df.index // TGn).map(dict(zip(idx, treatment_groups)))
这不能正确拆分组,不确定我哪里出错了。 我该如何纠正?
假设您的样本大小正好除以 n(即sample_size%n
为 0):
import numpy as np
groups = range(1,n+1)
df['columnC'] = np.repeat(groups,int(len(df)/n))
如果您的样本大小未完全除以 n(即sample_size%n
不为 0):
# Assigning the remaining rows to random groups
df['columnC'] = np.concatenate(
[np.repeat(groups,int(len(df)/n)),
np.random.randint(1, high=n, size=int(len(df)%n), dtype=int)])
# Assigning the remaining rows to group 'm'
df['columnC'] = np.concatenate(
[np.repeat(groups,int(len(df)/n)),
np.repeat([m],int(len(df)%n)), dtype=int)])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.