您需要按两列进行排序
df.sort_values(['a','b']).ffill()以确保稳定性。如果将an
np.nan留在组中的第一个位置,
ffill则将上一个组中的值填充到该位置。因为
np.nan它将被放置在任何排序的末尾,所以按两者进行排序
a并
b确保您不会
np.nan在任何组的前面。然后,您可以
.loc或
.reindex使用初始索引来恢复原来的订单。
这显然比其他建议要慢一点……但是,我认为在其他建议没有的地方是 正确 的。
演示
考虑数据框
df
df = pd.Dataframe({'a': [1,1,2,2,2], 'b': [1, np.nan, np.nan, 2, np.nan]})print(df) a b0 1 1.01 1 NaN2 2 NaN3 2 2.04 2 NaN尝试
df.sort_values('a').ffill() a b0 1 1.01 1 1.02 2 1.0 # <--- this is incorrect3 2 2.04 2 2.0相反做
df.sort_values(['a', 'b']).ffill().loc[df.index] a b0 1 1.01 1 1.02 2 2.03 2 2.04 2 2.0
特别说明
如果整个组缺少值,这仍然是不正确的



