Hi @dirkschumacher , to be honest with you, if it’s simple to do in python/pandas then one of the great things about KNIME is that you can just do it in python/pandas 
I’ve put together a workflow here that I think could do what you are asking, using KNIME nodes, but it’s the kind of thing you would only do to attempt to prove it can be done
. The Table Cropper node, which I’ve hardly ever used in a production workflow, allows us to remove the last column from the table without knowing its name, or index number.
To ensure that the table ends up in the same row sequence that it started before manipulation, I added a Counter. However, because we want to subsequently delete the final column using the Table Cropper, the Counter cannot remain on the end of the table, so there’s an extra complication at the start just to put the Counter into column 1 instead of column n.
You’ll also see I added a component of mine as a convenience to re-align the column names, but internally it just uses a standard pattern for doing this (that I can never remember… primarily because over the years, the KNIME team have changed the names of the nodes… hence the component
)
In the workflow, I also included an adapted version of your python code and included it in a python script node as follows :
import knime.scripting.io as knio
# data from KNIME to Python (pandas)
df = knio.input_tables[0].to_pandas()
mask = df.iloc[:, -1].notna()
df.loc[mask, df.columns[8:]] = (df.loc[mask, df.columns[8:]].shift(-1, axis=1).values)
# Remove the last column (your "na" column)
df = df.iloc[:, :-1]
# data from python (pandas) to KNIME
knio.output_tables[0] = knio.Table.from_pandas(df)
shifting columns in some rows to the left.knwf (78.8 KB)
I’m not 100% that I fully understood what your csv data would actually look like, but regardless, I think it demonstrates that your python script, adapted to work with KNIME is the clear winner here.