Python : Retrieve columns in order from two different dataframes

Viewed 49

I have two dataframes named result_digi and result_rossum. Both have the same number of columns. I want to bring the first column of result_rossum next to the first column of result_digi, bring the second columns side by side, and continue in this way to create a final csv file.

result_digi= pd.DataFrame()
result_rossum= pd.DataFrame()
for key,value in d.items():
try:
    df1 = json_normalize(d[key])
    # print(df1)
    # df1['company'] = 'digitastic'
    # df1['Guide'] = key 
    df2 = json_normalize(f[key]) 
    # df2['company'] = 'rossum'
    # df2['Guide'] = key
    result_digi = result_digi.append(df1)
    result_rossum = result_rossum.append(df2)      
except KeyboardInterrupt:
    break
except Exception as e:

    print(str(e))
    continue
b = pd.concat([result_digi,result_rossum], axis=1)
b.columns

columns of dataframes:

result_digi.columns

output :

Index(['digi_invoiceNo', 'digi_invoiceDate', 'digi_totalGross',
       'digi_vatAmount', 'digi_totalNet'],
      dtype='object')
result_rossum.columns

ouput:

Index(['rossum_invoiceNo', 'rossum_invoiceDate', 'rossum_totalGross',
       'rossum_vatAmount', 'rossum_totalNet'],
      dtype='object')

When I merge two dataframes with the above code, column sorting is ;

(['digi_invoiceNo', 'digi_invoiceDate', 'digi_totalGross','digi_vatAmount', 'digi_totalNet', 'rossum_invoiceNo','rossum_invoiceDate', 'rossum_totalGross', 'rossum_vatAmount','rossum_totalNet'])

OUTPUT:

(['digi_invoiceNo', 'rossum_invoiceNo','digi_invoiceDate', 'rossum_invoiceDate','digi_totalGross','rossum_totalGross','digi_vatAmount', 'rossum_vatAmount','digi_totalNet', ,'rossum_totalNet']) 
1 Answers

You could use zip() to do something like this (here with sample dataframes):

For the dataframes

df1 = pd.DataFrame(
    {"col_1_A": [1, 2, 3], "col_2_A": [4, 5, 6], "col_3_A": [7, 8, 9]}
)
df2 = pd.DataFrame(
    {"col_1_B": [-1, -2, -3], "col_2_B": [-4, -5, -6], "col_3_B": [-7, -8, -9]}
)
   col_1_A  col_2_A  col_3_A
0        1        4        7
1        2        5        8
2        3        6        9

   col_1_B  col_2_B  col_3_B
0       -1       -4       -7
1       -2       -5       -8
2       -3       -6       -9

this

cols_1 = (df1[col] for col in df1.columns)
cols_2 = (df2[col] for col in df2.columns)
df = pd.concat([col for pair in zip(cols_1, cols_2) for col in pair], axis=1)

results in the following dataframe df:

   col_1_A  col_1_B  col_2_A  col_2_B  col_3_A  col_3_B
0        1       -1        4       -4        7       -7
1        2       -2        5       -5        8       -8
2        3       -3        6       -6        9       -9
Related