Jak "wsadzic" jeden DataFrame w drugi

0

Hej mam nastepujace DataFrame'y

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_product([["A", "B"], ["AA", "BB"]])
columns = ["X", "Y"]

df = pd.DataFrame([[1,2],[5,8],[1,2],[5,8]], index = index, columns = columns)
dfSmall = pd.DataFrame([[1,4], [5,6]], index =  ["AAA", "BBB"], columns = columns)

Czyli pierwszy ma dwa poziomy indeksu, a drugi ma jeden poziom. Chcialbym "wsadzic" dfSmall do df w taki sposob ze dfSmall bedzie tworzyl 3 poziom indeksu dla wiersza ("A", "BB"). Czyli chcialbym zrobic trzeci poziom indeksu dla df i dodac dwa wiersze ("A", "BB", "AAA") oraz ("A", "BB", "BBB") ktore beda mialy wartosci z dfSmall. Probowalem zrobic tak:

df["3rd level"] = ""
df.set_index("3rd level", append=True, inplace=True)
df.loc[("A", "BB", ["AAA", "BBB"])] = dfSmall 

ale ostatnia linia zwraca error. Cel jest taki ze maja rozne mniejsze dataframey chcialbym powsadzac ich wartoci do wiekszego dataframe. Jak moge to zrobic w najbardziej elegancki sposob?

1

Nie rozumiem jaki efekt chciałbyś uzyskać...

W tej chwili masz

screenshot-20220819125140.png
Możesz pokazać jak miałby wyglądać wynikowy df ?

0

Nie wiem czy to o ten efekt Ci chodziło (poza tym - na pewno da się to lepiej rozwiązać - nie bawiłem się mocno multiindeksami)

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_product([["A", "B"], ["AA", "BB"]], names=['I', 'II'])
columns = ["X", "Y"]

df1 = pd.DataFrame([[1,2],[5,8],[1,2],[5,8]], index = index, columns = columns)
df2 = pd.DataFrame([[1,4], [5,6]], index =  ["AAA", "BBB"], columns = columns)

df1['III'] = 'Foo'
df1.set_index('III', append=True, inplace=True)

df2.index.name = 'III'
df2['I'] = 'A'
df2['II'] = 'BB'
df2.set_index(['I', 'II'], append=True, inplace=True)
df2=df2.reorder_levels(["I", "II", 'III'])

df1.append(df2)

screenshot-20220819154534.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1