在 pandas 中,向数据帧的子集添加时间偏移量没有任何效果

问题描述 投票:0回答:1

我注意到 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)

第二个代码条导致

time
df
列没有变化。为什么当我只添加到切片时没有任何变化?我该如何成功地做到这一点? Tnx

python pandas datetime slice
1个回答
0
投票

您可以尝试使用新值设置整个索引(而不仅仅是其中的一部分):

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
© www.soinside.com 2019 - 2024. All rights reserved.