使用唯一值和 return 每个唯一值的所有行的子集数据框

subset dataframe using unique values and return all rows for each unique value

我正在尝试根据唯一值获取 pandas 数据框的子集。

我的整个数据框大约有 5k 行,其中每一行都有一个 ID 和文本,每个 ID 可以有多个文本条目。数据框看起来像这样:

Text | ID
bla    1
blu    1 
ble    1 
bli    3
bly    3
bln    2
blt    2
blk    2
blv    2
blw    6

我想做的是指定一些唯一 ID,例如 3 和 return 它的所有行,最终结果如下所示:

    Text | ID 
    bli    3
    bly    3
    bln    2
    blt    2
    blk    2
    blv    2
    blw    6

return编辑了哪些 ID 并不重要,重要的是它是 3 个 ID,如果我重新运行该方法,它始终是相同的 3 个 ID。

我知道如何使用此方法select 数据帧的唯一值:

unique = df['ID'].nunique()

但我的智慧到此为止 - 任何帮助都将不胜感激。

如果哪 3 个 ID 无关紧要,您可以只获取前 3 个 ID unique_3 = df['ID'].unique[:3] 然后是 select 带有 df_id = df[df["ID"].isin(unique_3)] 的行。

使用 np.random.RandomState 和种子以实现可重复性,np.random.choicereplace=False 选择不同的元素,然后 pd.Series.unique 形成候选元素, pd.Series.isin 到屏蔽所需的 ID 三胞胎:

def get_unique_id_subset(df, k=3, seed=51):
    id_list = np.random.RandomState(seed).choice(df.ID.unique(), k, replace=False)
    return df[df.ID.isin(id_list)]

使用:

>>> get_unique_id_subset(df)
  Text  ID
0  bla   1
1  blu   1
2  ble   1
3  bli   3
4  bly   3
9  blw   6

>>> get_unique_id_subset(df)  # same result as before
  Text  ID
0  bla   1
1  blu   1
2  ble   1
3  bli   3
4  bly   3
9  blw   6

>>> get_unique_id_subset(df, seed=19)  # changed the seed
  Text  ID
0  bla   1
1  blu   1
2  ble   1
5  bln   2
6  blt   2
7  blk   2
8  blv   2
9  blw   6

>>> get_unique_id_subset(df, seed=19)  # result consistent with the seed
  Text  ID
0  bla   1
1  blu   1
2  ble   1
5  bln   2
6  blt   2
7  blk   2
8  blv   2
9  blw   6