假设我有一个这样的 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
1条答案
按热度按时间jucafojl1#
如果你尝试做一个比例子集,其中特定类别的百分比被保留,你可以选择某个百分比,比如说整个集合的25%,使用下面的代码进行采样:
这将占用整个集合的25%,保持列
column_category
的比例。