40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
import pandas as pd
|
|
import os
|
|
|
|
|
|
def filepathInitalGroup(df: pd.DataFrame) -> pd.DataFrame:
|
|
import os
|
|
import pandas as pd
|
|
from itertools import chain
|
|
|
|
# 1. Split comma-separated filenames into lists
|
|
df["filename_x"] = df["filename_x"].str.split(",")
|
|
|
|
# 2. Explode so each filename has its own row
|
|
df = df.explode("filename_x", ignore_index=True)
|
|
|
|
# 3. Strip whitespace from filenames
|
|
df["filename_x"] = df["filename_x"].str.strip()
|
|
|
|
# 4. Split into directory and filename
|
|
df["directory"] = df["filename_x"].apply(lambda x: os.path.dirname(x) if pd.notna(x) else "")
|
|
df["filename"] = df["filename_x"].apply(lambda x: os.path.basename(x) if pd.notna(x) else "")
|
|
|
|
# 5. Drop the original column
|
|
df = df.drop(columns=["filename_x"])
|
|
|
|
# 6. Ensure all columns are lists (except directory, which is the key)
|
|
for col in df.columns:
|
|
if col != "directory":
|
|
df[col] = df[col].apply(lambda x: x if isinstance(x, list) else [x])
|
|
|
|
# 7. Combine rows with the same directory, flatten lists, deduplicate
|
|
def combine_lists(series):
|
|
flat = list(chain.from_iterable(series))
|
|
# deduplicate while preserving order
|
|
return list(dict.fromkeys(flat))
|
|
|
|
df = df.groupby("directory", as_index=False).agg(combine_lists)
|
|
|
|
return df
|