I think you can use this:
df = df.apply(lambda x: pd.Series(x.dropna().values))
For example:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'Word':['Hello', 'My', 'Yellow', 'Golden', 'Yellow'],
'Word2':[np.nan, 'My Name', 'Yellow Bee', 'Golden Gates', np.nan],
'Word3':[np.nan, np.nan, 'Yellow Bee Hive', np.nan, np.nan]
})
print(df)
Initial dataframe:
Word Word2 Word3
0 Hello NaN NaN
1 My My Name NaN
2 Yellow Yellow Bee Yellow Bee Hive
3 Golden Golden Gates NaN
4 Yellow NaN NaN
and applying this lambda function:
df = df.apply(lambda x: pd.Series(x.dropna().values))
print(df)
gives:
Word Word2 Word3
0 Hello My Name Yellow Bee Hive
1 My Yellow Bee NaN
2 Yellow Golden Gates NaN
3 Golden NaN NaN
4 Yellow NaN NaN
Then you can fill NaN values with empty strings:
df = df.fillna('')
print(df)
Word Word2 Word3
0 Hello My Name Yellow Bee Hive
1 My Yellow Bee
2 Yellow Golden Gates
3 Golden
4 Yellow
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…