Jak "wsadzic" jeden DataFrame w drugi

Jak "wsadzic" jeden DataFrame w drugi
K1
  • Rejestracja:prawie 3 lata
  • Ostatnio:około rok
  • Postów:61
0

Hej mam nastepujace DataFrame'y

Kopiuj
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:

Kopiuj
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?

BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:4 dni
  • Postów:289
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 ?

BG
  • Rejestracja:prawie 6 lat
  • Ostatnio:4 dni
  • Postów:289
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)

Kopiuj
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.