将 Pandas 日期索引移至下个月
Shift Pandas date index to next month
我有一个带有日期索引的数据框。我想创建一个具有滞后值的新列。即,laggedfoo(1aug2016) = foo(1july2016)
我使用了dataframe.shift,但它没有按预期运行;我可以破解它来工作,但我想我错过了如何处理和转移日期索引的大局。
当我移动 1 'm' 时,不是移动到下个月,而是移动到当月的月末。 (2016 年 7 月 1 日变为 2016 年 7 月 30 日,而不是 2016 年 8 月 1 日)。
我可以移动 2 并得到我想要的,但我担心我缺少使用 shift
和 freq
参数
的一些基本想法
我认为您需要将频率更改为 month start frequency
- MS
- 请参阅 offset-aliases
:
import pandas as pd
fwd_df = pd.DataFrame(
{
"Dubai m1": {
pd.Timestamp("2016-08-01 00:00:00"): 3,
pd.Timestamp("2016-07-01 00:00:00"): 2,
pd.Timestamp("2016-09-01 00:00:00"): 4,
pd.Timestamp("2016-06-01 00:00:00"): 1,
}
}
)
print(fwd_df["Dubai m1"])
# 2016-06-01 1
# 2016-07-01 2
# 2016-08-01 3
# 2016-09-01 4
# Name: Dubai m1, dtype: int64
print(fwd_df["Dubai m1"].shift(1, freq="MS"))
# 2016-07-01 1
# 2016-08-01 2
# 2016-09-01 3
# 2016-10-01 4
# Freq: MS, Name: Dubai m1, dtype: int64
我有一个带有日期索引的数据框。我想创建一个具有滞后值的新列。即,laggedfoo(1aug2016) = foo(1july2016)
我使用了dataframe.shift,但它没有按预期运行;我可以破解它来工作,但我想我错过了如何处理和转移日期索引的大局。
当我移动 1 'm' 时,不是移动到下个月,而是移动到当月的月末。 (2016 年 7 月 1 日变为 2016 年 7 月 30 日,而不是 2016 年 8 月 1 日)。
我可以移动 2 并得到我想要的,但我担心我缺少使用 shift
和 freq
参数
我认为您需要将频率更改为 month start frequency
- MS
- 请参阅 offset-aliases
:
import pandas as pd
fwd_df = pd.DataFrame(
{
"Dubai m1": {
pd.Timestamp("2016-08-01 00:00:00"): 3,
pd.Timestamp("2016-07-01 00:00:00"): 2,
pd.Timestamp("2016-09-01 00:00:00"): 4,
pd.Timestamp("2016-06-01 00:00:00"): 1,
}
}
)
print(fwd_df["Dubai m1"])
# 2016-06-01 1
# 2016-07-01 2
# 2016-08-01 3
# 2016-09-01 4
# Name: Dubai m1, dtype: int64
print(fwd_df["Dubai m1"].shift(1, freq="MS"))
# 2016-07-01 1
# 2016-08-01 2
# 2016-09-01 3
# 2016-10-01 4
# Freq: MS, Name: Dubai m1, dtype: int64