Объединение кадров данных с неравномерными данными временных рядов

#python #pandas #dataframe

Вопрос:

У меня есть два кадра данных с данными временных рядов, значения которых представляют собой список. Я хочу объединить их в один фрейм данных, что приведет к объединению двух списков. Сложность заключается в том, что один фрейм данных содержит больше точек данных, чем другой. Когда я делаю «сумму» двух кадров данных для дат, которые не перекрываются, значения выводятся как NaN, вместо сохранения исходного значения. Для примера, df1 содержит следующее:

 2021-09-16 [AAA,BBB]    
2021-09-17 [CCC]    
2021-09-18 [DDD]
 

df2 содержит следующее:

 2021-09-16 [EEE]    
2021-09-17 [FFF]    
2021-09-18 []
2021-09-19 [GGG]
2021-09-20 [HHH,III]
 

Когда я делаю df1 df2, я получаю:

 2021-09-16 [AAA,BBB,EEE]    
2021-09-17 [CCC,FFF]    
2021-09-18 [DDD]
2021-09-19 NaN
2021-09-20 NaN
 

Вместо этого я хочу, чтобы 2021-09-19 и 2021-09-20 показали [GGG] и [HHH,III] соответственно. Каково же решение?

Ответ №1:

Установка

 >>> df1
                   col
2021-09-16  [AAA, BBB]
2021-09-17       [CCC]
2021-09-18       [DDD]

>>> df2
                   col
2021-09-16       [EEE]
2021-09-17       [FFF]
2021-09-18          []
2021-09-19       [GGG]
2021-09-20  [HHH, III]
 

Решение: DataFrame.align

Выровняйте два кадра данных по оси индекса и заполните значения отсутствующего индекса пустым списком [] , затем мы можем легко добавить два кадра данных, используя df1 df2

 d1, d2 = df1.align(df2, fill_value=[]))
print(d1   d2)

                        col
2021-09-16  [AAA, BBB, EEE]
2021-09-17       [CCC, FFF]
2021-09-18          [DDD, ]
2021-09-19            [GGG]
2021-09-20       [HHH, III]