#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]