在pandas中按组填写缺少的日期

时间:2014-12-02 04:18:42

标签: python pandas

我需要按组填写缺少的日期。这是创建数据框的代码。我想将填充列的日期向下添加到填充列日期更改的时间,并且仅在组名称之前添加。变化。

    data = {'tdate': [20080815,20080915,20081226,20090110,20090131,20080807,20080831,
    20080918,20081023,20081114,20081207,20090117,20090203,20090219,20090305,20090318,20090501],
        'name': ['A','A','A','A','A','B','B','B','B','B','B','B','B','B','B','B','B'],
    'fill': [NaN,NaN,20080915,NaN,NaN,NaN,NaN,NaN,NaN,20081023,
             NaN,NaN,NaN,NaN,20090219,NaN,NaN]}

    df = pd.DataFrame(data, columns=['tdate', 'name', 'fill'])
    df

当前数据框

tdate   name    fill
0    20080815    A   NaN
1    20080915    A   NaN
2    20081226    A   20080915
3    20090110    A   NaN
4    20090131    A   NaN
5    20080807    B   NaN
6    20080831    B   NaN
7    20080918    B   NaN
8    20081023    B   NaN
9    20081114    B   20081023
10   20081207    B   NaN
11   20090117    B   NaN
12   20090203    B   NaN
13   20090219    B   NaN
14   20090305    B   20090219
15   20090318    B   NaN
16   20090501    B   NaN

期望的输出

    tdate   name    fill
0    20080815    A   NaN
1    20080915    A   NaN
2    20081226    A   20080915
3    20090110    A   20080915
4    20090131    A   20080915
5    20080807    B   NaN
6    20080831    B   NaN
7    20080918    B   NaN
8    20081023    B   NaN
9    20081114    B   NaN
10   20081207    B   20081023
11   20090117    B   20081023
12   20090203    B   20081023
13   20090219    B   20081023
14   20090305    B   20081023
15   20090318    B   20090219
16   20090501    B   20090219

这是我的代码

df.groupby(df["name"])["fill"].fill()

1 个答案:

答案 0 :(得分:2)

你非常接近,你只需要转发 - 填充而不仅仅是填充:

df.groupby('name')["fill"].ffill()
Out[42]: 
0          NaN
1          NaN
2     20080915
3     20080915
4     20080915
5          NaN
6          NaN
7          NaN
8          NaN
9     20081023
10    20081023
11    20081023
12    20081023
13    20081023
14    20090219
15    20090219
16    20090219
dtype: float64

或等效地:

df.groupby('name')["fill"].fillna(method='ffill')