Pandas, how to join dataframes if one has multiindex

I have a dataframe like:

   Column1 Column2  Column3 Column4
0        1       A        4       X
1        2       B        5       Y
2        3       C        6       Z

And I want to “stack” Column1 and Column2.

I think stack() function can’t by used on subset of dataframe, so I’m thinking of these steps:
a) creating a new dataframe (df_subset).
b) Applying stack() on it.
c) and then merging the rest (df_rest).

But I’m stuck in the last point, getting an error because one df has multiindex. But from what I read, it shouldn’t be such an invincible obstacle.
Any suggestions, please?

My code here:

import pandas as pd
data = {
    'Column1': [1, 2, 3],
    'Column2': ['A', 'B', 'C'],
    'Column3': [4, 5, 6],
    'Column4': ['X', 'Y', 'Z']
}
df = pd.DataFrame(data)
print(df)

# step a)
df_subset = df[['Column1','Column2']]
df_rest = df[['Column3', 'Column4']]

# step b)
df_subset = df_subset.stack().to_frame()
print(df_subset) # looks good

# step c) I'm stuck.
df_subset.merge(df_rest...
df_subset.join(df_rest...
??

I’m not much of a pandas user and was unfamiliar with stack(). What is your desired end result?

or maybe I’m thinking about it wrongly?

I’m pasting a sketch.

Starting frame:
first

Wished result:
image

Basically I want to combine two columns into one (with rows stacked one on another).

Yeah, that isn’t “stacking” - which would involve changing the number of rows. That’s just combining the data from two different columns, row-wise (with a newline in between). And it’s very straightforward:

import pandas as pd
data = {
    'Column1': [1, 2, 3],
    'Column2': ['A', 'B', 'C'],
    'Column3': [4, 5, 6],
    'Column4': ['X', 'Y', 'Z']
}

df['Column2'] = df['Column2'] + '\n' + df['Column3'].astype(str)
del df['Column3']

right, I solved it that way (with newlines ‘\n’ ).

But for the sake of “code history”, I’m pasting here, where I got with the first approach:

import pandas as pd
data = {
    'date': ['2023-01-01', '2023-01-02', '2023-01-03'],
    'day': ['January 1', 'January 2', 'January 3'],
    'weekday': ['Sunday', 'Monday', 'Tuesday'],
    'name_day': ['New Year', 'Alexandra', 'Daniela']
}
df = pd.DataFrame(data)
df.set_index(['date'], inplace=True)

df_first = pd.concat([df.day,df.weekday], axis='rows').sort_index().to_frame()
df_first = df_first.stack().to_frame()
df_first.columns = ['combined']

df_second = df['name_day'].to_frame()
df_second.columns = [0]
df_second = df_second.stack().to_frame()
df_second.columns = ['name_day']

concated = pd.concat([df_first,df_second],axis='columns')
print(concated)

so with this initial dataframe:
image

I got here:
image

Which is not bad, but the “name_day” column necessarily contains duplicates. Which is not helpful, unless there is some trick to hide the duplicates (while retaining the number of rows)…
I don’t know, it’s just a speculation…