2 回答
TA贡献1856条经验 获得超17个赞
让我们使用 pathlib 并使用一些整洁的功能:
from pathlib import Path
def create_folder(path):
if not path.is_dir():
path.mkdir(parents=True)
def if_file_exists(filename,trg_folder,dataframe):
if trg_folder.joinpath(file).is_file():
# if file exists then write behavior here.
else:
dataframe.to_csv(trg_folder.joinpath(filename),index=False)
然后在下面的变量和 groupby 中列出您完全合格的 start_dir - 写入您的目录:
start_dir = r'your_start_dir' # like /tmp/files/data
for paths, group in df.groupby(['S','A']):
paths = list(map(str,paths)) # if ints.
target_folder = Path(start_dir).joinpath('DATA','S'+paths[0],'A'+paths[1])
create_folder(target_folder)
file_name = f"S{paths[0]}-A{paths[1]}.csv"
if_file_exists(file_name,target_folder,group)
df = pd.read_csv("your_start_dir\DATA\S1\A1\S1-A1.csv")
print(df)
X Y Z S A
0 0 1 2 1 1
TA贡献1911条经验 获得超7个赞
如果您想为“S”和“A”的每个组合创建一个 csv 文件(比如 data.csv),那么您可以执行 groupby,然后遍历每个组,分别保存每个组
样本
df = pd.DataFrame({
'X': [0,8,5,9,6],
'Y': [1,5,6,8,7],
'Z': [2,3,7,8,7],
'S': [1,1,2,2,1],
'A': [1,2,1,2,3]
})
for group_name, df_group in df.groupby(['S','A']):
S = f"S{group_name[0]}"
A = f"A{group_name[1]}"
p = os.path.join(S, A)
if not os.path.exists(p):
os.makedirs(p)
df_group[['X', 'Y', 'Z']].reset_index(drop=True).to_csv(os.path.join(p, f"{S}_{A}.csv"), index=False)
您将获得以下目录结构中的文件:
添加回答
举报