Как объединить мультииндексированные столбцы данных - PullRequest
1 голос
/ 28 мая 2019

Я хотел бы сделать несколько сложную многоиндексную конкатенацию панд в столбцах данных.Этот конкат состоит из двух или более фреймов данных в следующем формате:

indicator     eps2p                         ... logreturn                      
stock         TIET11     ALSC3     ALPA4    ...   TIET11  ALSC3 ALPA4    

date
2000-01-31       NaN       NaN       NaN    ...     NaN   NaN   NaN  
2000-02-01       100       NaN       NaN    ...     NaN   NaN   NaN  
2000-02-02       101       NaN       NaN    ...     NaN   NaN   NaN  
2000-02-03       104       NaN       NaN    ...     NaN   NaN   NaN 
2000-02-04       NaN       NaN       NaN    ...     NaN   NaN   NaN 

Теперь представьте, что у меня есть еще два фрейма данных, аналогичных приведенным выше, но вместо eps2p и logreturn у меня естьev2ebitda и logreturn и ev2ebit и logreturn на уровне столбца indicator.Кроме того, представьте себе, что не все кадры данных имеют одинаковые столбцы stock под каждым из индикаторов.Наконец, также учтите, что не обязательно два кадра данных с одним и тем же stock под одним и тем же indicator имеют одинаковый индекс, т. Е. Я мог бы иметь два кадра данных со столбцом logreturn/TIET11, но с дополнительными данными:

DATAFRAME #1                   
              logreturn     
              TIET11        
date                        
2000-01-31    100       
2000-02-01    NaN       
2000-02-02    102       
DATAFRAME #2                   
              logreturn     
              TIET11        
date                        
2000-01-31    100       
2000-02-01    101       
2000-02-02    NaN       

Имея это в виду, как мне объединить эти кадры данных в один, который имеет все столбцы уникальных индикаторов (eps2p, ev2ebit и ev2ebitda) и общий (* 1022)*) таким образом, чтобы у меня не было повторных или потерянных данных ни на одном из объединенных кадров данных?

1 Ответ

1 голос
/ 28 мая 2019

Вы можете использовать update, чтобы сделать это:

In [11]: df1.update(df2)

In [12]: df1
Out[12]:
           logreturn
              TIET11
date
2000-01-31     100.0
2000-02-01     101.0
2000-02-02     102.0

Поскольку в df1 отсутствуют столбцы, вы можете сначала переиндексировать с помощью объединения:

res = df1.reindex(columns=df3.columns | df4.columns)
res.update(df2)

Примечание. Возможно, вам также потребуется переиндексировать индекс.

...