按照给定的CSV,以PatientID这列为准线,即相同PatientID的值视为同一个人,总控443个人,按照80%(354个人)和20%(79个人)的比例,分裂出两个CSV,给出python
时间: 2024-09-11 10:06:02 浏览: 32
修改目录下Dicom图像PatientID-可在32位系统上运行.7z
在Python中,你可以使用pandas库来处理这个问题。首先确保安装了pandas,如果还没有安装,可以通过pip安装:
```bash
pip install pandas
```
以下是一个简单的步骤来实现这个需求:
1. 加载CSV文件到DataFrame中:
```python
import pandas as pd
# 假设你的CSV文件名为'data.csv'
df = pd.read_csv('data.csv')
```
2. 根据`PatientID`分组并计算行数以确定80%和20%的人数:
```python
total_people = df['PatientID'].nunique() # 总人数
split_percentages = [0.8, 0.2] # 分割比例
num_samples_80 = int(total_people * split_percentages)
num_samples_20 = total_people - num_samples_80
```
3. 使用`sample`方法随机抽取指定数量的行:
```python
random_state = 42 # 可选,设置随机种子保持结果一致
df_majority = df[df['PatientID'].isin(df['PatientID'].value_counts().index[:num_samples_80])].sample(frac=1, random_state=random_state)
df_minority = df.drop(df_majority.index).sample(n=num_samples_20, replace=False, random_state=random_state)
```
4. 将分割后的数据保存为新的CSV文件:
```python
df_majority.to_csv('majority_data.csv', index=False)
df_minority.to_csv('minority_data.csv', index=False)
```
在这个代码中,`sample`方法用于从每个`PatientID`中随机抽取指定数量的行,`frac=1`表示替换原有数据,而`replace=False`表示不替换,保证唯一性。
阅读全文