熊猫:如何防止df.append()返回NaN值

时间:2020-08-24 19:01:40

标签: 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中,但是问题是,它会在df1中到处出现一些NaN

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

我该怎么做才能实现上述输出?我在熊猫文档中找不到它。谢谢

1 个答案:

答案 0 :(得分:1)

使用填充,用在列中看到的最后一个非NaN值向前填充NaN值。

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