【问题标题】:Fill missing dates by group in pandas在熊猫中按组填充缺失的日期
【发布时间】:2014-12-02 04:18:42
【问题描述】:

我需要按组填写缺失的日期。这是创建数据框的代码。我只想将填充列的日期向下添加,直到填充列的日期发生更改并且仅在组“名称”更改之前。

    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()

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你已经很接近了,你只需要转发-填充而不是仅仅填充:

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      相关资源
      最近更新 更多