Ich habe mehrere Dataframes mit den gleichen Spalten, die ich nur auf ihren Indizes zusammenführen möchte.Anfügen von Ebene zu Spalte Index in Python Pandas
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
konnte ich
pd.concat([df1, df2, df3], axis=1)
verwenden und
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
Aber ich verlieren die Informationen bekommen, wo jede Spalte kam. Ich könnte auch eine Zusammenführung auf zwei Datenrahmen tun und die Suffixe Parameter
print df1.merge(df2, left_index=True, right_index=True, suffixes=('_1', '_2'))
und
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
dann kann ich meine verschmilzt Daisy-Chain bekommen verwenden, aber die Suffixe Parameter gilt nur für Spalten, die einen Namen teilen . Sobald ich die erste Zusammenführung suffigiert habe, sind die Namen nicht mehr mit dem dritten Datenrahmen identisch.
Ich dachte, die Lösung wäre, eine Ebene an den Spaltenindex jedes Datenrahmens mit den relevanten Informationen, die notwendig sind, um diese Spalten zu unterscheiden. Dann könnte ich ein pd.concat() laufen und etwas, das wie folgt aussieht:
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
Um jedoch diese zu bekommen passieren. Ich musste den Datenrahmen missbrauchen wie so:
df1_ = df1.T
df1_['Source'] = 'df1'
df1_.set_index('Source', append=True, inplace=True)
df1_.index = df1_.index.swaplevel(0, 1)
df1_ = df1_.T
Letztlich mag ich ein Ergebnis viel wie die letzte concat Erklärung suchen. Gibt es einen besseren Weg dorthin? Gibt es eine bessere Möglichkeit, eine Ebene an den Spaltenindex anzuhängen?
Danke, PiR
mögliches Duplikat von [Multiindex Datenrahmen aus der Sequenz von Datenrahmen] (http://stackoverflow.com/questions/22546003/multi-index-dataframe-from-sequence-of-dataframes) – joris