我有一个带有多索引(日期、输入时间)的数据框,这个数据框可能在列(值、Id)中包含一些 NA 值。我想填充前向值,但仅按日期填充,无论如何我都找不到以非常有效的方式执行此操作。
这是我拥有的数据框类型:

这是我想要的结果:

因此,要按日期正确填充,我可以使用 groupby(level=0) 函数。groupby 很快,但按日期分组应用于数据帧的填充功能真的太慢了。
这是我用来比较简单向前填充(它没有给出预期结果但运行速度非常快)和预期按日期向前填充(给出预期结果但确实太慢)的代码。
import numpy as np
import pandas as pd
import datetime as dt
# Show pandas & numpy versions
print('pandas '+pd.__version__)
print('numpy '+np.__version__)
# Build a big list of (Date,InputTime,Value,Id)
listdata = []
d = dt.datetime(2001,10,6,5)
for i in range(0,100000):
listdata.append((d.date(), d, 2*i if i%3==1 else np.NaN, i if i%3==1 else np.NaN))
d = d + dt.timedelta(hours=8)
# Create the dataframe with Date and InputTime as index
df = pd.DataFrame.from_records(listdata, index=['Date','InputTime'], …Run Code Online (Sandbox Code Playgroud)