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

标签 python pandas datetime slice

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

第二个代码条导致 dftime 列没有变化。为什么当我仅向切片执行添加时没有任何变化?我该如何成功地做到这一点? TNx

最佳答案

您可以尝试使用新值设置整个索引(如果索引已排序,则不仅仅是其中的一部分):

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

关于python - 在 pandas 中,向数据帧的子集添加时间偏移量没有任何效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76854081/

相关文章:

python - 列表中字符串之间的字母组合

python - 我想使用 Python 中的套接字编程流式传输网络摄像头

mysql - 有效日期时间值的奇怪 MySQL 警告 1264

javascript - 如何将 GMT 时间转换为本地时间?

python - 两个 DF、pandas 的组合

自 1-1-1970 以来,javascript 以毫秒为单位将本地日期和时间数组转换为 UTC?

python - 使用 python 将图像传递到 Zapier 中的输出

python - PyQT QtCore.信号

python - 如何使数据框中的每一行的每一列都有一个值?

pandas - 在 Pandas 中聚合多列时如何重置索引