我需要找到日期框架中两个日期之间的中间月份值。我通过显示四个示例来简化此情况。
import pandas as pd
import numpy as np
import datetime
df=pd.DataFrame([["1/31/2016","3/1/2016"],
["6/15/2016","7/14/2016"],
["7/14/2016","8/15/2016"],
["8/7/2016","9/6/2016"]], columns=['FromDate','ToDate'])
df['Month'] = df.ToDate.dt.month-df.FromDate.dt.month
我正在尝试附加一列,但没有得到想要的结果。
我需要查看以下值:[2,6,7,8]
。
答案 0 :(得分:3)
您可以通过将两个日期之间的timedelta
的一半加上较早的日期来显式计算平均日期。然后只需提取月份:
# convert to datetime if necessary
df[df.columns] = df[df.columns].apply(pd.to_datetime)
# calculate mean date, then extract month
df['Month'] = (df['FromDate'] + (df['ToDate'] - df['FromDate']) / 2).dt.month
print(df)
FromDate ToDate Month
0 2016-01-31 2016-03-01 2
1 2016-06-15 2016-07-14 6
2 2016-07-14 2016-08-15 7
3 2016-08-07 2016-09-06 8
答案 1 :(得分:0)
在使用dt.month之前,您需要将字符串转换为datetime。 此行计算平均月份数:
df['Month'] = (pd.to_datetime(df['ToDate']).dt.month +
pd.to_datetime(df['FromDate']).dt.month)//2
print(df)
FromDate ToDate Month
0 1/31/2016 3/1/2016 2
1 6/15/2016 7/14/2016 6
2 7/14/2016 8/15/2016 7
3 8/7/2016 9/6/2016 8
这仅适用于同一年的两个日期。
jpp的解决方案很好,但在某些情况下会给出错误的答案:
[“ 2016年1月1日”,“ 2016年3月1日”]人们会期望2,因为2月在1月至3月之间,但是jpp会给出1对应于1月。