基于列中的值采样 Pandas 数据框

mle*_*ast 5 dataframe pandas

我有一个大数据框,我想根据target列值上的值进行采样,该值是二进制的:0/1

我想在“目标”列中提取相同数量的具有 0 和 1 的行。我正在考虑使用 Pandas 采样函数,但不确定如何为基于target列的数据框声明我想要的两个类中相同数量的样本。

我正在考虑使用这样的东西:

df.sample(n=10000, weights='target', random_state=1)
Run Code Online (Sandbox Code Playgroud)

不确定如何编辑它以在列中获得 5k1's和 5k 的10k 条记录。任何帮助表示赞赏!0'starget

Vai*_*ali 12

您可以按目标对数据进行分组,然后进行采样,

df = pd.DataFrame({'col':np.random.randn(12000), 'target':np.random.randint(low = 0, high = 2, size=12000)})
new_df = df.groupby('target').apply(lambda x: x.sample(n=5000)).reset_index(drop = True)

new_df.target.value_counts()

1    5000
0    5000
Run Code Online (Sandbox Code Playgroud)


Ahm*_*mad 12

您可以使用DataFrameGroupBy.sample方法,如下所示:

sample_df = df.groupby("target").sample(n=5000, random_state=1)
Run Code Online (Sandbox Code Playgroud)


mle*_*ast 6

还发现这是一个很好的方法:

df['weights'] = np.where(df['target'] == 1, .5, .5)
sample_df = df.sample(frac=.1, random_state=111, weights='weights')
Run Code Online (Sandbox Code Playgroud)

frac根据您想要从原始数据帧返回的数据百分比更改 的值。