从 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)]
我有一个包含 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)]