我需要实现以下目标:
数据:
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'的每个值)以查找缺失的值日期值,并创建一个新值来复制之前的值。
有什么想法吗?
非常感谢您!
最好的问候,
答案 0 :(得分:0)
在min
列中找到每个值的max
和A
日期。在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