使用pandas时如何根据特定列对DataFrame进行分组? 如何使用pandas从DataFrame中按比例抽样行?
时间: 2024-09-11 14:06:01 浏览: 146
pandas按行按列遍历Dataframe的几种方式
在Pandas中,你可以使用`groupby()`方法对DataFrame按照特定列进行分组。这个方法会返回一个`GroupBy`对象,你可以用它来进行聚合(如求和、平均值等)或者对每个分组应用其他处理。
对于按比例抽样行,可以采用以下步骤:
1. 首先,你需要确定要抽样的行数和总体数据的比例。假设你想抽取总行数的50%,那么可以用DataFrame的行数乘以比例得到目标行数。
```python
import pandas as pd
total_rows = df.shape
target_rows = total_rows * 0.5 # 假设抽样50%
```
2. 接着,你可以使用`sample()`函数随机抽样指定数量的行,同时设置`replace=False`表示不重复抽样。如果想要保留原始索引,加上参数`random_state=seed`确保结果可重复。
```python
df_sampled = df.sample(n=target_rows, replace=False, random_state=42)
```
这将返回一个新的DataFrame,其中包含原 DataFrame 根据指定列分组后的每组随机抽样的一半行。
如果你已经有了一定的列用于分组,可以在`sample()`前先调用`groupby()`,然后在`apply()`或`size()`后再进行抽样。例如:
```python
grouped_df = df.groupby(by='your_column').apply(lambda x: x.sample(frac=0.5, replace=False))
```
这样就按组抽取了每组50%的样本。记得替换`'your_column'`为实际的列名。
阅读全文