python - 如何填写列中的第一个日期?

标签 python python-3.x pandas

我有一个df:

dates   values
2020-01-01 00:15:00 38.61487
2020-01-01 00:30:00 36.905204
2020-01-01 00:45:00 35.136584
2020-01-01 01:00:00 33.60378
2020-01-01 01:15:00 32.306791999999994
2020-01-01 01:30:00 31.304574

我正在创建一个名为 start 的新列,如下所示:

df = df.rename(columns={'dates': 'end'})
df['start']= df['end'].shift(1)

当我这样做时,我得到以下结果:

end values  start
2020-01-01 00:15:00 38.61487    NaT
2020-01-01 00:30:00 36.905204   2020-01-01 00:15:00
2020-01-01 00:45:00 35.136584   2020-01-01 00:30:00
2020-01-01 01:00:00 33.60378    2020-01-01 00:45:00
2020-01-01 01:15:00 32.306791999999994  2020-01-01 01:00:00
2020-01-01 01:30:00 31.304574   2020-01-01 01:15:00

我想用

填充该 NaT
2020-01-01 00:00:00

如何做到这一点?

最佳答案

使用Series.fillna日期时间s,例如通过 Timestamp :

df['start']= df['end'].shift().fillna(pd.Timestamp('2020-01-01'))

或者如果 pandas 0.24+ 带有 fill_value 参数:

df['start']= df['end'].shift(fill_value=pd.Timestamp('2020-01-01'))

如果所有日期时间都是规则的,则始终可以通过 offsets.DateOffset 减去 15 分钟 的差值:

df['start']= df['end'] - pd.offsets.DateOffset(minutes=15)
print (df)
                  end     values               start
0 2020-01-01 00:15:00  38.614870 2020-01-01 00:00:00
1 2020-01-01 00:30:00  36.905204 2020-01-01 00:15:00
2 2020-01-01 00:45:00  35.136584 2020-01-01 00:30:00
3 2020-01-01 01:00:00  33.603780 2020-01-01 00:45:00
4 2020-01-01 01:15:00  32.306792 2020-01-01 01:00:00
5 2020-01-01 01:30:00  31.304574 2020-01-01 01:15:00

关于python - 如何填写列中的第一个日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60059300/

相关文章:

python - 检查值是否是前一个值、当前值和下一个值的最大值/最小值

python - 向 x 轴上的标签添加后缀

python - Sympy python 周长

python - 在外部循环中更新 Tkinter GUI

python - 任意深度嵌套循环

python - 将字典传递给 OrderedDict 有什么问题?

Python:加载 CSV,第一列作为行名,第一行作为列名

python - 如何从 python 访问自定义 swift 或 Objective C 框架

python - 如何在 bash/Python/Fabric/sh 脚本中使用 pew?

python - 适用于 Windows 10 的 Anaconda (Python 2.7) 出现内核错误。Spyder IDE 控制台错误