对缺少的日期行重新采样,并在除上以外的所有列中向前填充值

2024-05-29 09:37:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有以下示例数据帧:

No  FlNo    DATE        Loc    Type
20  1826    6/1/2017    AAA    O
20  1112    6/4/2017    BBB    O
20  1234    6/6/2017    CCC    O
20  43      6/7/2017    DDD    O
20  1840    6/8/2017    EEE    O

我想把错失的日期补上两行。我还想用最上面一行的值来填充非日期列的值,但是对于填充行,请将“Type”列留空。在

请参阅期望输出:

^{pr2}$

我已经搜索了谷歌和stackoverflow,但没有找到任何日期填充答案熊猫数据框。在


Tags: 数据no示例datetype请参阅locbbb
1条回答
网友
1楼 · 发布于 2024-05-29 09:37:42

首先,使用pd.to_datetimeDATE转换为datetime

df.DATE = pd.to_datetime(df.DATE)

选项1
使用resample+ffill,然后稍后重置Type列。首先,将唯一日期存储在某个列表中:

^{pr2}$

现在

df = df.set_index('DATE').resample('1D').ffill().reset_index()
df.Type = df.Type.where(df.DATE.isin(dates), '')

df

        DATE  No  FlNo  Loc Type
0 2017-06-01  20  1826  AAA    O
1 2017-06-02  20  1826  AAA     
2 2017-06-03  20  1826  AAA     
3 2017-06-04  20  1112  BBB    O
4 2017-06-05  20  1112  BBB     
5 2017-06-06  20  1234  CCC    O
6 2017-06-07  20    43  DDD    O
7 2017-06-08  20  1840  EEE    O

{cd1>如果需要的话,可以恢复到原来的状态

df.DATE = df.DATE.dt.strftime('%m/%d/%Y')

选项2
另一个选项是asfreq+ffill+fillna

df = df.set_index('DATE').asfreq('1D').reset_index()
c = df.columns.difference(['Type'])
df[c] = df[c].ffill()
df['Type'] = df['Type'].fillna('')

df
        DATE    No    FlNo  Loc Type
0 2017-06-01  20.0  1826.0  AAA    O
1 2017-06-02  20.0  1826.0  AAA     
2 2017-06-03  20.0  1826.0  AAA     
3 2017-06-04  20.0  1112.0  BBB    O
4 2017-06-05  20.0  1112.0  BBB     
5 2017-06-06  20.0  1234.0  CCC    O
6 2017-06-07  20.0    43.0  DDD    O
7 2017-06-08  20.0  1840.0  EEE    O

相关问题 更多 >

    热门问题