pandas dataframe随机抽取一百行,作为一个新的dataframe
时间: 2023-11-11 22:06:28 浏览: 343
可以使用pandas的sample方法来随机抽取指定数量的行,然后使用copy方法创建一个新的dataframe对象。
代码实现如下:
```python
import pandas as pd
# 假设原始dataframe为df
new_df = df.sample(n=100).copy()
```
说明:
- `sample(n=100)`表示随机抽取100行,可以根据具体需求来调整该参数。
- `copy()`表示创建一个新的dataframe对象,避免修改原始dataframe。
相关问题
如何在pandas DataFrame中只从列表中随机选择一部分数据填充行?
在pandas DataFrame中,如果你想从列表中随机选择一部分数据填充行,你可以先从列表中随机选择指定数量的元素,然后再将它们放到DataFrame对应的位置上。这里是一个简单的例子:
假设我们有一个列表 `row_data` 和一个整数 `n` 表示要抽取的行数,我们可以这样做:
```python
import pandas as pd
import numpy as np
# 假设这是你的列表
row_data = [list(range(10)), list(range(10, 20)), ...] # 包含多个行数据的列表
# 设定随机抽取的行数
n_rows_to_draw = 2 # 这里是随机抽取2行
# 首先确定哪些行会被抽中,可以用 random.choice 函数
selected_rows_indices = np.random.choice(len(row_data), n_rows_to_draw, replace=False)
# 然后选取这些行数据填充到 DataFrame
data_to_add = [row_data[i] for i in selected_rows_indices]
df_temp = pd.DataFrame(data_to_add)
# 将新数据追加到原始 DataFrame 的最后几行
df = pd.concat([df, df_temp], ignore_index=True)
print(df)
```
这会随机从 `row_data` 中选择 `n_rows_to_draw` 行,并将其添加到DataFrame的末尾。
使用pandas时如何根据特定列对DataFrame进行分组? 如何使用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'`为实际的列名。
阅读全文