【发布时间】:2020-12-18 09:26:28
【问题描述】:
我正在尝试比较 2 个日期列表,方法是检查第一个数据框中的“timekey”列是否在 2 个日期之间,其中 2 个日期是时间表和时间表中的日期 - 1 年。
例如,检查 30Aug2020 是否介于 30Nov2020 和 30Nov2020-1year 之间,即 30Nov2019。 然后我想在原始 df 中有一个第三列,它显示时间键日期和比较时间列表日期之间的差异。
我正在使用 pandas 在 python 中完成所有这些工作。
import pandas as pd
import datetime as dt
datelist = pd.date_range(start = dt.datetime(2016,8,31), end = dt.datetime(2020,11,30), freq = '3M')
data = {'ID': ['1', '2', '3'], 'timekey': ['31Dec2016', '30Jun2017', '30Aug2018']}
df = pd.DataFrame(data)
df['timekey'] = pd.to_datetime(df['timekey'])
print(df)
print(datelist)
这是我尝试过的代码,但我有一个值错误,他们说长度必须匹配才能进行比较。怎么回事?
for date in datelist:
if (df['timekey'] <= datelist) & (df['timekey'] >= (datelist - pd.offsets.DateOffset(years=1))):
df['diff'] = df['timekey'] - (datelist - pd.offsets.DateOffset(years=1))
预期的输出应该是对于每个 timekey,如果它在 datelist 指定的日期范围内,它应该生成一个具有相同 ID 和 timekey 的全新行,第三个新列是月份的差异。
例如,如果时间键是 30Jun2020,则它会在 30Nov2019-30Nov2020、30Aug2019-30Aug2020 之间。将创建 2 行,其中以月为单位的时差分别为 5 和 2。
【问题讨论】:
-
请发布您的预期输出
-
"for date in datelist" 将遍历 datelist 中的 18 个日期。 “df”只有 3 行,所以听起来/看起来您正在尝试将 18 行的列添加到只有 3 行的 df。