Pandas: как запретить df.append() возвращать значения NaN

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь добавить содержимое одного фрейма данных в другой. Вот базовый пример того, с чем я работаю:

 import numpy as np
import pandas as pd



df1 = pd.DataFrame({'Id': ['001','001','001','002','002','002','004','004'],
                    'Date':['2020-01-01','2020-01-02','2020-01-03','2020-01-01','2020-01-02','2020-01-03','2020-01-02','2020-01-03'],
                    'Quantity': [100,100,100,50,50,50,60,60],
                    'fx' :[1,1,1,2,2,2,1,1],
                    'fy' : [1,1,1,3,3,3,1,1]})

df2 = pd.DataFrame({'Id': ['001','001','001','002','002','002', '003'],
                    'Date':['2019-01-01','2019-01-02','2019-01-03','2019-01-01','2019-01-02','2019-01-03','2019-02-02'],
                    'Quantity': [100,100,100,50,50,50,20]})
  

Теперь я хочу добавить содержимое df2 в df1, но проблема в том, что это приводит к некоторому NaN здесь и там в df1

 histo = df1.append(df2)
histo = histo.sort_values('Id')
print(histo)

    Id        Date  Quantity   fx   fy
0  001  2020-01-01       100  1.0  1.0
1  001  2020-01-02       100  1.0  1.0
2  001  2020-01-03       100  1.0  1.0
0  001  2019-01-01       100  NaN  NaN
1  001  2019-01-02       100  NaN  NaN
2  001  2019-01-03       100  NaN  NaN
3  002  2020-01-01        50  2.0  3.0
4  002  2020-01-02        50  2.0  3.0
5  002  2020-01-03        50  2.0  3.0
3  002  2019-01-01        50  NaN  NaN
4  002  2019-01-02        50  NaN  NaN
5  002  2019-01-03        50  NaN  NaN
6  003  2019-02-02        20  NaN  NaN
6  004  2020-01-02        60  1.0  1.0
7  004  2020-01-03        60  1.0  1.0

  

результат, которого я хочу достичь, заключается в том, что для каждой строки ‘Id’ значения fx и fy остаются одинаковыми. результат будет выглядеть следующим образом:

 
    Id        Date  Quantity   fx   fy
0  001  2020-01-01       100  1.0  1.0
1  001  2020-01-02       100  1.0  1.0
2  001  2020-01-03       100  1.0  1.0
0  001  2019-01-01       100  1.0  1.0
1  001  2019-01-02       100  1.0  1.0
2  001  2019-01-03       100  1.0  1.0
3  002  2020-01-01        50  2.0  3.0
4  002  2020-01-02        50  2.0  3.0
5  002  2020-01-03        50  2.0  3.0
3  002  2019-01-01        50  2.0  3.0
4  002  2019-01-02        50  2.0  3.0
5  002  2019-01-03        50  2.0  3.0
6  003  2019-02-02        20  2.0  3.0
6  004  2020-01-02        60  1.0  1.0
7  004  2020-01-03        60  1.0  1.0
  

что я могу сделать для достижения вышеуказанного результата? Я не могу найти это в документации pandas. Спасибо

Комментарии:

1. Может быть, добавить .ffill? histo = histo.sort_values('Id').ffill()

2. вот и все! Спасибо, я не смог этого вспомнить! и почему этого нет в документации, и я чувствую, что было бы полезно иметь это в качестве параметра внутри функции добавления

Ответ №1:

Используйте ffill, forward заполняет значение NaN последним значением, отличным от NaN, которое видно в столбце.

 histo = histo.sort_values('Id').ffill()