我有一个 pandas DataFrame 说:
user value
0 a 1
1 a 2
2 a 3
3 a 4
4 a 5
5 b 6
6 b 7
7 b 8
8 b 9
9 b 10
10 c 11
11 c 12
12 c 13
13 c 14
14 c 15
现在我想按用户分组,并从中创建两个互斥的随机样本,例如
Set1 每组 1 个样本:
user value
3 a 4
9 b 10
13 c 14
Set2 每组 2 个样本:
user value
0 a 1
1 a 2
5 b 6
6 b 7
10 c 11
11 c 12
到目前为止我试过这个:
u = np.array(['a','b','c'])
u = np.repeat(u,5)
df = pd.DataFrame({'user':u,'value':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]})
set1 = df.groupby(['user']).tail(1)
set2 = df.groupby(['user']).head(2)
但这些不是随机样本,我希望它们相互排斥。有什么想法吗?
附言。每个组总是至少有 3 个元素
请您参考如下方法:
您可以为每个用户随机选择3条记录:
a = df.groupby("user")["value"].apply(lambda x: x.sample(3))
a
Out[27]:
user
a 3 4
0 1
2 3
b 5 6
7 8
6 7
c 14 15
10 11
13 14
dtype: int64
并将第一个分配给第一组,其余两个分配给第二组:
a.groupby(level=0).head(1)
Out[28]:
user
a 3 4
b 5 6
c 14 15
dtype: int64
a.groupby(level=0).tail(2)
Out[29]:
user
a 0 1
2 3
b 7 8
6 7
c 10 11
13 14
dtype: int64
