在Python中四舍五入到最近的一天

2024-04-26 05:56:06 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我从SQL下载了一个表,现在正在对它执行操作。其中有两列是Start_Date和Maturity_Date,我希望将这两列减去,然后除以另一列。我已经知道如何用这个代码减去它们:

df['START_DATE']=pd.to_datetime(df['START_DATE'])
df['MATURITY_DATE']=pd.to_datetime(df['MATURITY_DATE'])

df['c']=df['MATURITY_DATE']-df['START_DATE']
df['d']=df['c'].div(df['TERM'], axis=0)

但是,当我把日期时间中的“c”除以int形式的“Term”,我的新df['d']看起来像“60天4:00:00”。我不希望它是日期,但我希望df['d']四舍五入到最接近的整数,并且我可以像整数一样对它执行操作。本质上,如何将df['d']转换为最接近的整数?在


Tags: to代码divdfsqldatetimedate整数
1条回答
网友
1楼 · 发布于 2024-04-26 05:56:06

您可以使用pandas.Series.dt.round,指定希望它是最近的一天。在

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')

如果需要数字而不是时间增量,请使用numpy进行转换:

^{pr2}$

样本数据

import pandas as pd
import numpy as np

df = pd.DataFrame({'START_DATE': [pd.to_datetime('2017-01-01'), pd.to_datetime('2017-01-01')],
                  'MATURITY_DATE': [pd.to_datetime('2017-01-06 11:00:00'), pd.to_datetime('2017-01-06 13:00:00')],
                  'TERM': [3,2]})

#  START_DATE       MATURITY_DATE  TERM
#0 2017-01-01 2017-01-06 11:00:00     3
#1 2017-01-01 2017-01-06 13:00:00     2

代码:

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')
#0   2 days
#1   3 days
#dtype: timedelta64[ns]

(df['MATURITY_DATE']-df['START_DATE']).div(df.TERM).dt.round('1d')/np.timedelta64(1, 'D')
#0    2.0
#1    3.0
#dtype: float64

相关问题 更多 >