缺少日期值,需要创建它们并使用上一个已知日期自动填充

时间:2019-03-19 20:42:37

标签: pandas

我需要实现以下目标:

数据:

A B C
9612 2018-05-23 2.1
9612 2018-05-25 3.7
9615 2018-06-03 5.0
9615 2018-06-05 4.7

我需要什么:

A B C
9612 2018-05-23 2.1
9612 2018-05-24 2.1
9612 2018-05-25 3.7
9615 2018-06-03 5.0
9615 2018-06-04 5.0
9615 2018-06-05 4.7

这个想法是某些时候某些特定列'A'值的数据中缺少特定的日期值,所以我需要遍历'B'中的每个值(对于'A'的每个值)以查找缺失的值日期值,并创建一个新值来复制之前的值。

有什么想法吗?

非常感谢您!

最好的问候,

1 个答案:

答案 0 :(得分:0)

min列中找到每个值的maxA日期。在for循环中,使用asfreq和在DataFrame上追加之间创建新的日期。

df['B'] = pd.to_datetime(df['B'])

df2 = df.copy()
ids = df2.A.unique()
for id in ids:
    temp = df2.loc[df2.A == id, 'B'].agg(['min', 'max'])

    df2 = df2.append(df2.loc[ (df2.B.between(temp['min'], temp['max'])) & 
                              (df2.A == id)
                            ].set_index('B').asfreq('d').reset_index())

此后,删除重复项,按日期排序,并使用ffill方法填充NaN值

df2 = df2.drop_duplicates().sort_values('B').ffill()

df.head()

A   B   C
0   9612.0  2018-05-23  2.1
1   9612.0  2018-05-24  2.1
1   9612.0  2018-05-25  3.7
2   9615.0  2018-06-03  5.0
1   9615.0  2018-06-04  5.0
3   9615.0  2018-06-05  4.7