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

第二个码条导致df的列time没有变化.为什么当我只对切片执行加法操作时,没有任何变化?我该如何成功地做到这一点呢?TNX

推荐答案

您可以try 使用新值设置整个索引(如果对索引进行了排序,则不仅仅是其中的一部分):

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相关问答推荐

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

对于一个给定的数字,找出一个整数的最小和最大可能的和

通过Selenium从页面获取所有H2元素

如何过滤包含2个指定子字符串的收件箱列名?

如何在Polars中从列表中的所有 struct 中 Select 字段?

如何在UserSerializer中添加显式字段?

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

Django admin Csrf令牌未设置

try 检索blob名称列表时出现错误填充错误""

lityter不让我输入左边的方括号,'

Geopandas未返回正确的缓冲区(单位:米)

matplotlib图中的复杂箭头形状

找到相对于列表索引的当前最大值列表""

交替字符串位置的正则表达式

Numpyro AR(1)均值切换模型抽样不一致性

递归函数修饰器

如何防止html代码出现在quarto gfm报告中的pandas表之上

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

高效地计算数字数组中三行上三个点之间的Angular

在不中断格式的情况下在文件的特定部分插入XML标签