提问人:NeStack 提问时间:8/8/2023 更新时间:8/8/2023 访问量:35
在 pandas 中,向数据帧的子集添加时间偏移量不起作用
In pandas adding a time offset to a subset of the dataframe has no effect
问:
我注意到 pandas 包的一个奇怪行为,这在某些情况下会导致意外无法添加时间偏移量。
假设我有以下数据帧:
df = pd.DataFrame({'time': ['2022-01-24', '2022-02-24', '2022-03-24'],
'value': [10, 20, 30]})
我可以使用以下语法成功为其添加时间偏移量:
df.set_index(['time'], inplace=True)
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
df.index = df.index + pd.offsets.DateOffset(years=100)
但是有一个失败,当我想只将偏移量添加到数据帧的子集时,例如只添加到之后的日期,见下文:2022-02-25
df.set_index(['time'], inplace=True)
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
df[df.index>pd.to_datetime('2022-02-25')].index = df[df.index>pd.to_datetime('2022-02-25')].index + pd.offsets.DateOffset(years=100)
第二个代码滑移导致 的列没有变化。为什么当我只对切片执行添加时没有任何变化?我如何成功地做到这一点?TNX系列time
df
答:
2赞
Andrej Kesely
8/8/2023
#1
您可以尝试使用新值设置整个索引(如果索引已排序,而不仅仅是其中的一部分):
mask = df.index > pd.to_datetime("2022-02-25")
df.index = (
*df[~mask].index,
*(df[mask].index + pd.offsets.DateOffset(years=100)),
)
print(df)
指纹:
value
2022-01-24 10
2022-02-24 20
2122-03-24 30
评论
0赞
NeStack
8/8/2023
谢谢,这成功了!但是你能在你的回答中解释为什么我的代码片段不起作用吗?你做了什么不同的事情来让它发挥作用?
0赞
Andrej Kesely
8/8/2023
@NeStack我猜您只设置了原始索引值的副本,因此新值不会传播到整个数据帧。
评论