pandas按比例分层抽样
时间: 2023-08-04 09:05:17 浏览: 76
您可以使用`pandas`库中的`sample`函数进行按比例分层抽样。以下是一个示例代码:
```python
import pandas as pd
# 创建一个示例数据集
data = pd.DataFrame({'group': ['A', 'A', 'B', 'B', 'B'], 'value': [1, 2, 3, 4, 5]})
# 按照"group"列进行分层抽样,每个组的抽样比例为0.5
sampled_data = data.groupby('group').apply(lambda x: x.sample(frac=0.5))
print(sampled_data)
```
上述代码中,我们首先创建了一个包含"group"和"value"两列的示例数据集。然后,使用`groupby`函数按照"group"列进行分组,并通过`apply`函数在每个组上应用抽样操作。在`sample`函数中,我们设置了`frac`参数为0.5,表示每个组抽样的比例为50%。最后,打印出抽样后的数据集。
注意,这里的分层抽样是基于每个组内的比例进行抽样,而不是整体数据集的比例。如果您需要按照整体数据集的比例进行分层抽样,请参考`stratified sampling`方法。
相关问题
分层抽样 sklearn
分层抽样(Stratified Sampling)是一种保持样本分布比例的抽样方法。在sklearn中,可以使用StratifiedShuffleSplit类来进行分层抽样。该类可以将数据集划分为训练集和测试集,以便进行模型训练和评估。
使用StratifiedShuffleSplit类进行分层抽样的步骤如下:
1. 首先,导入相关的库和模块,例如导入StratifiedShuffleSplit类和pandas库。
2. 读取数据并进行相应的数据预处理,例如对数据进行特征工程和划分类别。
3. 创建一个StratifiedShuffleSplit对象,并设置参数,如测试集大小和随机种子。
4. 使用split方法对数据集进行分层抽样,该方法返回训练集和测试集的索引。
5. 根据返回的索引,从原始数据集中提取训练集和测试集。
下面是一个示例代码,展示了如何使用StratifiedShuffleSplit类进行分层抽样:
```
from sklearn.model_selection import StratifiedShuffleSplit
import pandas as pd
# 读取数据并进行数据预处理
df = pd.read_csv('housing.csv')
df['income_cat'] = pd.cut(df['median_income'], bins=[0, 1.5, 3.0, 4.5, 6., np.inf], labels=[1, 2, 3, 4, 5])
# 创建StratifiedShuffleSplit对象
split = StratifiedShuffleSplit(test_size=0.2, random_state=42)
# 使用split方法进行分层抽样
for train_index, test_index in split.split(df, df['income_cat']):
start_train_set = df.loc[train_index] # 提取训练集
start_test_set = df.loc[test_index] # 提取测试集
```
python 分层抽样
Python中的分层抽样是指从总体中根据不同层级进行抽样的过程。通常,数据被分成不同的层级,然后从每个层级中获取样本。下面是一个示例代码,展示了如何在Python中进行分层抽样:
```python
import pandas as pd
from sklearn.model_selection import train_test_split
# 假设有一个包含标签的数据集
data = pd.read_csv("data.csv")
# 根据标签分成不同的层级
strata = data.groupby('label')
# 分层抽样,从每个层级中抽取样本
sampled_data = strata.apply(lambda x: x.sample(frac=0.2, replace=False))
# 打印抽样后的数据
print(sampled_data)
```
在这个例子中,我们首先读取一个包含标签的数据集,并将其按照标签分成不同的层级。然后,使用`apply`函数从每个层级中抽取指定比例(这里是20%)的样本。最后,将抽样后的数据打印出来。
这是一个简单的分层抽样示例,你可以根据自己的数据和需求进行适当的调整和修改。