Как объединить несколько Multiindex Dfs в один DF - PullRequest
1 голос
/ 10 февраля 2020

Итак, у меня есть следующие два Multiindex-Dfs:

data = {('California', 0): 'LA',
        ('California', 1): 'SF',
        ('Texas', 0): 'HO',
        ('New York', 0): 'BX',
        ('New York', 1): 'NY'}
df= pd.Series(data)

df = pd.DataFrame(df)
df

#needs column name
df.index.names = ['state', 'Idx']
df

, который возвращает:

                0
state       Idx 
California  0   LA
            1   SF
Texas       0   HO
New York    0   BX
            1   NY

И второй:

data2 = {('California', 0): '20%',
        ('California', 2): '30%'}
df2 = pd.Series(data2)

df2 = pd.DataFrame(df2)
df2

df2.index.names = ['state', 'X']
df2

, который возвращает :

            X   0
state           
California  0   20%
            2   30%

Теперь: я бы хотел объединить два, чтобы он выглядел следующим образом.

Хитрый бит: df Idx 0 и 1 должны быть объединены с 0 и 2 в дф2. Что мне делать?

                0
state       Idx 
California  0   LA  20%
            1   SF  30%
Texas       0   HO
New York    0   BX
            1   NY

Спасибо уже!

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать:

(pd.concat([df.unstack('state'),
           df2.unstack('state').rename(columns = {0:1}).reset_index(drop=True)]
          ,axis=1)
   .stack().swaplevel().sort_index(level =0))

или

df.join(df2.reset_index().drop(columns = 'X')
           .set_index('state',append = True)
           .rename(columns = {0:1})
           .swaplevel()
           .rename_axis(index = [*df.index.names])
        )

#                 0    1
#state      Idx         
#California 0    LA  20%
#           1    SF  30%
#Texas      0    HO  NaN
#New York   0    BX  NaN
#           1    NY  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...