Объедините несколько pandas фреймов данных, беря по одному столбцу за раз из каждого Фрейма данных - PullRequest
0 голосов
/ 26 марта 2020

Я хочу объединить следующие DataFrames:

DF1:
         value1   value2
index
    0       a0       b0
    1       a1       b1
    2       a2       b2
    3       a3       b3

DF2:
         value1   value2
index
    0       c0       d0
    1       c1       d1
    2       c2       d2
    3       c3       d3

DF3:
         value1   value2
index
    0       e0       f0
    1       e1       f1
    2       e2       f2
    3       e3       f3

Я хотел бы объединить их в один DataFrame, где мы берем один столбец из каждого DataFrame за раз. Столбцы должны иметь имена с одинаковыми именами столбцов на первом уровне и со списком имен, заданных для второго уровня, где этот список имеет тот же размер, что и число фреймов данных (в примере это 3). Ожидаемый DataFrame будет выглядеть следующим образом для списка имен [M1, M2, DIF]:

         value1                     value2
            M1       M2       DIF      M1       M2       DIF
index                                              
    0       a0       c0       e0       b0       d0       f0
    1       a1       c1       e1       b1       d1       f1
    2       a2       c2       e2       b2       d2       f2
    3       a3       c3       e3       b3       d3       f3

Какой самый простой / быстрый способ сделать это?

1 Ответ

3 голосов
/ 26 марта 2020

Давайте сделаем concat

df=pd.concat([df1,df1,df1],keys=list('ABC'),axis=1).swaplevel(0,1,axis=1).sort_index(level=0,axis=1)


      value1         value2        
           A   B   C      A   B   C
index                              
0         a0  a0  a0     b0  b0  b0
1         a1  a1  a1     b1  b1  b1
2         a2  a2  a2     b2  b2  b2
3         a3  a3  a3     b3  b3  b3

Обновление

l=['M1', 'M2', 'DIF']
pd.concat([df1,df1,df1],keys=['M1', 'M2', 'DIF'],axis=1).swaplevel(0,1,axis=1).reindex(columns=pd.MultiIndex.from_product([list(df1),l]))
      value1         value2        
          M1  M2 DIF     M1  M2 DIF
index                              
0         a0  a0  a0     b0  b0  b0
1         a1  a1  a1     b1  b1  b1
2         a2  a2  a2     b2  b2  b2
3         a3  a3  a3     b3  b3  b3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...