从数据帧中提取具有特殊属性的行

2024-06-10 07:15:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在熊猫中有一个数据帧,看起来像这样:

              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:我们删除AID00016AE9的行,因为只有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:我想从每组辅助工具中随机选择两行,并将其放入df2:

              AID       VID  Freq
3        00016A3E  0BF6C78D     1
6        00016A3E  0790E61B     1
27       00016AFF  0C559B34     1
28       00016AFF  06B5C040     7

Tags: 数据dfdf1df2freq辅助工具vidaid
1条回答
网友
1楼 · 发布于 2024-06-10 07:15:42

这里有一种使用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

基于aid_count获取df1

In [438]: df1 = df[df.AID.isin(aid_count[aid_count > 10].index)]

df中筛选出3行df1

In [441]: df.shape
Out[441]: (30, 3)

In [442]: df1.shape
Out[442]: (27, 3)

现在,取样

通过apply使用lambda函数对AID组进行n=2采样。你知道吗

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

相关问题 更多 >