У меня есть этот CSV-файл (часть очень большого файла)
Я хочу преобразовать его в
Я пытался
for i in range(len(df) - 1, 0, -1):
if pd.isna(df.loc[i, 'Course/Section']):
for col in df.columns:
if pd.notna(df.loc[i, col]):
df.loc[i - 1, col] = f"{df.loc[i - 1, col]} {df.loc[i, col]}" if pd.notna(df.loc[i - 1, col]) else df.loc[i, col]
df = df.dropna(subset=['Course/Section']).reset_index(drop=True)
Но мой код, похоже, не работает должным образом.
Итак, я хочу объединить значения строки с предыдущими, одно за другим снизу вверх, пока столбец Course/Section
пуст, пока я не доберусь до строки, где Course/Section
не пусто.
Создайте группы на основе существующих значений в столбце 'Course/Section'
с помощью cumsum
, затем groupby
и агрегируйте объединения значений в каждой группе:
g = df["Course/Section"].notna().cumsum()
df = (
df.fillna("")
.groupby(g, as_index=False)
.agg(lambda x: " ".join(x.astype(str)).strip())
)
Course/Section Credits Course Name Time Building Instructor Exam Date Course Language
0 ACCT1112/10 3.0 Introductory Financial Accounting MON 08:00-09:50 CMT/E07 xxxxxxx 8/5/2022 SUN 08:00-11:00 E15 English
1 ACCT1112/11 3.0 Introductory Financial Accounting WED 08:00-09:50 CMT/E07 xxxxxxx English
2 ACCT1112/20 3.0 Introductory Financial Accounting MON 10:00-11:50 CMT/E05 xxxxxxx 8/5/2022 SUN 08:00-11:00 E16 English
3 ACCT1112/21 3.0 Introductory Financial Accounting WED 10:00-11:50 CMT/E05 xxxxxxx English
4 ACCT1112/30 3.0 Introductory Financial Accounting MON 12:00-13:50 CMT/E06 xxxxxxx 8/5/2022 SUN 08:00-11:00 E17 English
5 ACCT1112/31 3.0 Introductory Financial Accounting WED 12:00-13:50 CMT/E06 xxxxxxx English
6 ACCT1112/40 3.0 Introductory Financial Accounting MON 14:15-16:05 CMT/E23 xxxxxxx 8/5/2022 SUN 08:00-11:00 E18 English
7 ACCT1112/41 3.0 Introductory Financial Accounting WED 14:15-16:05 CMT/E23 xxxxxxx English
8 ACCT1112/50 3.0 Introductory Financial Accounting SUN 10:00-11:50 CMT/E27 xxxxxxx 8/5/2022 SUN 08:00-11:00 E19 English
9 ACCT1112/51 3.0 Introductory Financial Accounting THU 10:00-11:50 CMT/E27 xxxxxxx English
10 ACCT1112/60 3.0 Introductory Financial Accounting TUE 10:00-11:50 CMT/E16 xxxxxxx-1 xxxxxxx-2 8/5/2022 SUN 08:00-11:00 E20 English
11 ACCT1112/61 3.0 Introductory Financial Accounting THU 08:00-09:50 CMT/E16 mmmmm-1 mmmmm-2 English