Добавить уровень в индекс столбца в python pandas - программирование
Подтвердить что ты не робот

Добавить уровень в индекс столбца в python pandas

У меня есть несколько Dataframes с теми же столбцами, которые я хотел бы объединить только по их индексам.

print df1

out[]:               Value  ISO
       Id                      
       200001   8432000000  USD
       200230  22588186000  USD
       200247   4633000000  USD
       200291   1188880000  USD
       200418   1779776000  USD

print df2

out[]:               Value  ISO
      Id                       
      200001  1.309168e+11  USD
      200230  5.444096e+10  USD
      200247  9.499602e+09  USD
      200291  2.089603e+09  USD
      200418  3.827251e+09  USD

print df3

out[]:           Value
      Id                       
      200001  3.681908
      200230  3.408507
      200247  4.531866
      200291  0.273029
      200418  3.521822

Я мог бы использовать

pd.concat([df1, df2, df3], axis=1)

и получим

out[]:              Value  ISO         Value  ISO     Value
      Id                                                   
      200001   8432000000  USD  1.309168e+11  USD  3.681908
      200230  22588186000  USD  5.444096e+10  USD  3.408507
      200247   4633000000  USD  9.499602e+09  USD  4.531866
      200291   1188880000  USD  2.089603e+09  USD  0.273029
      200418   1779776000  USD  3.827251e+09  USD  3.521822

Но я теряю информацию о том, откуда пришел каждый столбец. Я мог бы также объединить два кадра данных и использовать параметр суффиксов

print df1.merge(df2, left_index=True, right_index=True, suffixes=('_1', '_2'))

и получим

out[]:            Value_1 ISO_1       Value_2 ISO_2
      Id                                           
      200001   8432000000   USD  1.309168e+11   USD
      200230  22588186000   USD  5.444096e+10   USD
      200247   4633000000   USD  9.499602e+09   USD
      200291   1188880000   USD  2.089603e+09   USD
      200418   1779776000   USD  3.827251e+09   USD

Затем я смогу связать свои слияния, но параметр суффикса применяется только к столбцам, которые имеют общее имя. После того, как я перенесил первое слияние, имена больше не будут совпадать с третьим фреймворком данных.

Я решил, что решение будет заключаться в добавлении уровня к индексу столбца каждого кадра данных с соответствующей информацией, необходимой для различения этих столбцов. Затем я мог запустить pd.concat() и получить что-то похожее на это:

print pd.concat([df1_, df2_, df3_], axis=1)

out[]:Source           df1                df2            df3
                     Value  ISO         Value  ISO     Value
      200001     8.432e+09  USD  1.309168e+11  USD  3.681908
      200230  2.258819e+10  USD  5.444096e+10  USD  3.408507
      200247     4.633e+09  USD  9.499602e+09  USD  4.531866
      200291   1.18888e+09  USD  2.089603e+09  USD  0.273029
      200418  1.779776e+09  USD  3.827251e+09  USD  3.521822

Однако, чтобы это произошло. Мне пришлось злоупотреблять такими файлами:

df1_ = df1.T
df1_['Source'] = 'df1'
df1_.set_index('Source', append=True, inplace=True)
df1_.index = df1_.index.swaplevel(0, 1)
df1_ = df1_.T

В конечном счете, я хочу, чтобы результат выглядел так же, как последний оператор concat. Есть ли лучший способ добраться туда? Есть ли лучший способ добавить уровень к индексу столбца?

Спасибо, ПиР

4b9b3361