我在pandas中有一个如下所示的数据框:
AID VID Freq
0 00016A3E 0127C661 1
1 00016A3E 0C05DA5D 2
2 00016A3E 0C032814 1
3 00016A3E 0BF6C78D 1
4 00016A3E 0A79DFF1 1
5 00016A3E 07BD2FB2 1
6 00016A3E 0790E61B 1
7 00016A3E 0C24ED25 3
8 00016A3E 073630B5 3
9 00016A3E 06613535 1
10 00016A3E 05F809AF 1
11 00016A3E 05C625FF 1
12 00016A3E 04220EA8 4
13 00016A3E 013A29E5 1
14 00016A3E 0761C98A 1
15 00016AE9 0A769475 16
16 00016AE9 0A7DED0A 2
17 00016AE9 0ABF60DF 9
18 00016AFF 0AE3F25A 2
19 00016AFF 0AEFE12F 5
20 00016AFF 0BD8975A 2
21 00016AFF 44DF880B 1
22 00016AFF 43F9E08E 2
23 00016AFF 44EA5E08 2
24 00016AFF 4539ED1E 16
25 00016AFF 8516B55A 4
26 00016AFF 0972AFF2 1
27 00016AFF 0C559B34 1
28 00016AFF 06B5C040 7
29 00016AFF 0B0426FA 1
我想:
1-提取AID出现10次或更多次的所有行,让我们称之为df1。
2-从那个df1我想为每个AID随机选择2行并将它们从df1移到另一个数据帧中,让我们称之为df2。
所以生成的df应该如下所示:
df1:我们删除了AID
为00016AE9
的行,因为它只出现了3次。
AID VID Freq
0 00016A3E 0127C661 1
1 00016A3E 0C05DA5D 2
2 00016A3E 0C032814 1
4 00016A3E 0A79DFF1 1
5 00016A3E 07BD2FB2 1
7 00016A3E 0C24ED25 3
8 00016A3E 073630B5 3
9 00016A3E 06613535 1
10 00016A3E 05F809AF 1
11 00016A3E 05C625FF 1
12 00016A3E 04220EA8 4
13 00016A3E 013A29E5 1
14 00016A3E 0761C98A 1
18 00016AFF 0AE3F25A 2
19 00016AFF 0AEFE12F 5
20 00016AFF 0BD8975A 2
21 00016AFF 44DF880B 1
22 00016AFF 43F9E08E 2
23 00016AFF 44EA5E08 2
24 00016AFF 4539ED1E 16
25 00016AFF 8516B55A 4
26 00016AFF 0972AFF2 1
29 00016AFF 0B0426FA 1
df2:我想从每组AID中随机选择两行并将其放在df2中:
AID VID Freq
3 00016A3E 0BF6C78D 1
6 00016A3E 0790E61B 1
27 00016AFF 0C559B34 1
28 00016AFF 06B5C040 7
答案 0 :(得分:1)
这是使用sample
In [436]: aid_count = df.AID.value_counts()
In [437]: aid_count
Out[437]:
00016A3E 15
00016AFF 12
00016AE9 3
Name: AID, dtype: int64
In [440]: aid_count[aid_count > 10]
Out[440]:
00016A3E 15
00016AFF 12
Name: AID, dtype: int64
根据df1
aid_count
In [438]: df1 = df[df.AID.isin(aid_count[aid_count > 10].index)]
将3行从df
过滤为df1
In [441]: df.shape
Out[441]: (30, 3)
In [442]: df1.shape
Out[442]: (27, 3)
现在,进行抽样
通过n=2
AID
功能,在apply
组上获取lambda
个样本。
In [439]: df1.groupby('AID', as_index=False).apply(lambda x: x.sample(n=2))
Out[439]:
AID VID Freq
0 1 00016A3E 0C05DA5D 2
9 00016A3E 06613535 1
1 19 00016AFF 0AEFE12F 5
22 00016AFF 43F9E08E 2