使用唯一值子集dataframe,并返回每个唯一值的所有行

2024-06-16 12:59:33 发布

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

我试图基于唯一值获取熊猫数据帧的子集

我的整个数据框大约有5k行,其中每行有一个ID和文本,每个ID可以有多个文本条目。dataframe对象如下所示:

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

我想做的是指定一些唯一的ID,例如3,并返回它的所有行,其中最终结果如下所示:

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

返回哪个ID并不重要,只要它是3个ID,如果我重新运行该方法,它总是相同的3个ID

我知道如何使用此方法选择数据帧的unqiue值:

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

但这就是我智慧的终点——感谢任何帮助


Tags: 数据方法text文本iddataframe条目子集
2条回答

如果哪3个ID不重要,您可以使用 unique_3 = df['ID'].unique[:3],然后选择带有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

相关问题 更多 >