Я думаю, что запуск нового целевого DataFrame должен происходить не только при изменении значений число из NaN (по сравнению с предыдущей строкой), но и когда это число такое же , но NaN значения находятся в разных столбцах .
Поэтому я предлагаю следующую формулу:
dfs = [g.dropna(how='all',axis=1) for _,g in
df.groupby(df.isna().ne(df.isna().shift()).any(axis=1).cumsum())]
Вы можете напечатать частичные кадры данных (любые их число) работает:
n = 0
for grp in dfs:
print(f'\ndf No {n}:\n{grp}')
n += 1
Преимущество моего решения над другим становится очевидным, когда вы добавляете в исходный DataFrame еще одну строку, содержащую:
5 NaN NaN 3.0
Она также содержит 1 ненулевое значение (как две предыдущие строки). Другое решение будет обрабатывать все эти строки как один частичный DataFrame, содержащий:
movie rating
3 mol NaN
4 lob NaN
5 NaN 3.0
, как вы можете видеть, с NaN значениями, тогда как мое решение делит эти строки на 2 отдельных кадра данных, без любой NaN .