使用唯一值和 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.choice
和 replace=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
我正在尝试根据唯一值获取 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.choice
和 replace=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