pandas 具有多个条件的 Dataframe 中的值的随机选择

m3eecexj  于 2023-01-11  发布在  其他
关注(0)|答案(1)|浏览(156)

假设我有一个这样的 Dataframe 。

import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.choice(list(['a', 'b', 'c', 'd']), 50), columns=list('1'))
print(df.value_counts())
1
d    18
a    12
b    12
c     8
dtype: int64

现在,我尝试的是根据列中每个值的频率进行采样,例如,如果值的计数小于8(这里是值c),则选择50%的行,如果介于8和12之间,则选择40%,而大于12,则选择30%。
下面是我认为可能是一种方法来做到这一点,但这并不能产生我到底在寻找什么。

sample_df = df.groupby('1').apply(lambda x: x.sample(frac=.2)).reset_index(drop=True)
print(sample_df.value_counts())
1
d    4
a    2
b    2
c    2
jucafojl

jucafojl1#

如果你尝试做一个比例子集,其中特定类别的百分比被保留,你可以选择某个百分比,比如说整个集合的25%,使用下面的代码进行采样:

sample=df.groupby('column_category', group_keys=False).apply(lambda x: x.sample(frac=0.25))

这将占用整个集合的25%,保持列column_category的比例。

相关问题