从 pandas 数据框中随机删除 n 组

Randomly drop n-groups from pandas dataframe

我有一个包含 15466 行 × 125 列的数据框。 "Subject ID" 列(15466 行)包含 400 个唯一 ID,其中每个 ID 出现大约 40 次。我想从我的数据框中随机删除 10 个主题(cca 400 行)。到目前为止我试过这个:

trial = df.groupby(['Subject_ID']).apply(lambda x: x.sample(10))

但我意识到这个函数从每个 Subject_ID 中随机取 10 行而不是 10 gropups/Subject_ID 的

您可以使用 Series.unique with numpy.random.choice 随机 select 10 个 ID,然后使用 isin 的布尔索引从您的 DataFrame 中过滤掉它们:

import numpy as np

exclude_ids = np.random.choice(df['Subject_ID'].unique(), 10)

df_new = df[~df['Subject_ID'].isin(exclude_ids)]