Python Pandas 用 timedelta 填充
Python Pandas fillna with timedelta
pandas 数据框的标准 fillna 方法允许限制矩阵中接下来的 k 个条目。现在我不想通过条目数来限制它,而是在某个时间段内(我的索引是 DatetimeIndex)。我的想法是这些值有一种衰减,所以我想前向填充值而不是 NA 比方说半小时,但不会更远。我该如何解决?
index value_a value_b diff
2016-01-01 00:01:00 2.8 NaN NaN
2016-01-01 00:06:00 2.8 5.4 -2.6
2016-01-01 00:11:00 NaN 5.4 NaN
2016-01-01 00:16:00 NaN NaN NaN
2016-01-01 00:21:00 NaN 5.4 NaN
在那个例子中,我例如想在未来仅 14 分钟后替换 NaN 值,以便在 value_a 列中的 00:21:00 保留 NaN,而 value_a 和 value_b 的其他 NaN 消失.
如果是上采样,您可以使用 resample
+ transform
并聚合 first
:
#for testing 10Min
df = df.resample('10Min').transform('first')
print (df)
value_a value_b diff
index
2016-01-01 00:01:00 2.8 5.4 -2.6
2016-01-01 00:06:00 2.8 5.4 -2.6
2016-01-01 00:11:00 NaN 5.4 NaN
2016-01-01 00:16:00 NaN 5.4 NaN
2016-01-01 00:21:00 NaN 5.4 NaN
或者可能需要 transform
+ ffill
:
df = df.resample('10T').transform('ffill')
print (df)
value_a value_b diff
index
2016-01-01 00:01:00 2.8 NaN NaN
2016-01-01 00:06:00 2.8 NaN NaN
2016-01-01 00:11:00 2.8 5.4 -2.6
2016-01-01 00:16:00 2.8 5.4 -2.6
2016-01-01 00:21:00 NaN 5.4 NaN
pandas 数据框的标准 fillna 方法允许限制矩阵中接下来的 k 个条目。现在我不想通过条目数来限制它,而是在某个时间段内(我的索引是 DatetimeIndex)。我的想法是这些值有一种衰减,所以我想前向填充值而不是 NA 比方说半小时,但不会更远。我该如何解决?
index value_a value_b diff
2016-01-01 00:01:00 2.8 NaN NaN
2016-01-01 00:06:00 2.8 5.4 -2.6
2016-01-01 00:11:00 NaN 5.4 NaN
2016-01-01 00:16:00 NaN NaN NaN
2016-01-01 00:21:00 NaN 5.4 NaN
在那个例子中,我例如想在未来仅 14 分钟后替换 NaN 值,以便在 value_a 列中的 00:21:00 保留 NaN,而 value_a 和 value_b 的其他 NaN 消失.
如果是上采样,您可以使用 resample
+ transform
并聚合 first
:
#for testing 10Min
df = df.resample('10Min').transform('first')
print (df)
value_a value_b diff
index
2016-01-01 00:01:00 2.8 5.4 -2.6
2016-01-01 00:06:00 2.8 5.4 -2.6
2016-01-01 00:11:00 NaN 5.4 NaN
2016-01-01 00:16:00 NaN 5.4 NaN
2016-01-01 00:21:00 NaN 5.4 NaN
或者可能需要 transform
+ ffill
:
df = df.resample('10T').transform('ffill')
print (df)
value_a value_b diff
index
2016-01-01 00:01:00 2.8 NaN NaN
2016-01-01 00:06:00 2.8 NaN NaN
2016-01-01 00:11:00 2.8 5.4 -2.6
2016-01-01 00:16:00 2.8 5.4 -2.6
2016-01-01 00:21:00 NaN 5.4 NaN