Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建pd.date\u范围的列_Python_Pandas - Fatal编程技术网

Python 创建pd.date\u范围的列

Python 创建pd.date\u范围的列,python,pandas,Python,Pandas,我有这样的数据: import datetime as dt import pandas as pd df = pd.DataFrame({'date':[dt.datetime(2018,8,25), dt.datetime(2018,7,21)], 'n':[10,7]}) 我想创建第三列,其中包含由pd.date\u range创建的日期范围,使用“date”作为开始日期,“n”作为期间数。 因此,第一个条目应该是: pd.date_range(dt

我有这样的数据:

import datetime as dt
import pandas as pd
df = pd.DataFrame({'date':[dt.datetime(2018,8,25), dt.datetime(2018,7,21)],
                   'n':[10,7]})
我想创建第三列,其中包含由pd.date\u range创建的日期范围,使用“date”作为开始日期,“n”作为期间数。 因此,第一个条目应该是:

pd.date_range(dt.datetime(2018,8,25), periods=10, freq='d')
(我有一个“目标”日期列表,我的目标是检查date_范围是否包含任何这些目标日期)

我试过这个:

df['date_range'] = df.apply(lambda x: pd.date_range(x['date'],
                                                     x['n'],
                                                     freq='d'))
但这给出了一个关键错误:('date','occurrentedatindex date')


您知道如何在不使用for循环的情况下执行此操作,或者有更好的解决方案吗?

您应该在
apply
中添加
axis=1

df['date_range'] = df.apply(lambda x: pd.date_range(x['date'], x['n'], freq='d'), axis=1)

我想出了一个有效的解决方案(但我相信有更好的方法…)


您可以在不创建日期范围或日期列的情况下解决问题。要检查tgt中的目标日期是否属于df行指定的日期范围,可以计算日期范围的结束,然后检查tgt中的每个日期是否在时间间隔的开始和结束之间。下面的代码实现了这一点,并生成与您自己的答案中相同的“target_date”列:

df = pd.DataFrame({'date':[dt.datetime(2018,8,25), dt.datetime(2018,7,21)],
               'n':[10,7]})

df["daterange_end"] = df.apply(lambda x: x["date"] + pd.Timedelta(days=x["n"]), axis=1)

tgt = [dt.datetime(2018,8,26)]

df['target_date'] = 0
df.loc[(tgt[0] > df.date) &(tgt[0] < df.daterange_end),"target_date"] = 1

print(df)

#       date         n  daterange_end   target_date
# 0 2018-08-25  10  2018-09-04      1
# 1 2018-07-21  7   2018-07-28      0
df=pd.DataFrame({'date':[dt.datetime(2018,8,25),dt.datetime(2018,7,21)],
‘n’:[10,7]})
df[“daterange_end”]=df.apply(λx:x[“date”]+pd.Timedelta(天=x[“n”]),轴=1)
tgt=[dt.日期时间(2018,8,26)]
df['target_date']=0
df.loc[(tgt[0]>df.date)和(tgt[0]
这会引发ValueError:值的长度与索引的长度不匹配,因此您需要在pd.date\u range()中添加“start=”和“periods=”以及apply()中的axis=1,如下所示:df['date\u range']=df.apply(lambda x:pd.date\u range(start=x['date'],periods=x['n'],freq='d'),axis=1)
df = pd.DataFrame({'date':[dt.datetime(2018,8,25), dt.datetime(2018,7,21)],
               'n':[10,7]})

df["daterange_end"] = df.apply(lambda x: x["date"] + pd.Timedelta(days=x["n"]), axis=1)

tgt = [dt.datetime(2018,8,26)]

df['target_date'] = 0
df.loc[(tgt[0] > df.date) &(tgt[0] < df.daterange_end),"target_date"] = 1

print(df)

#       date         n  daterange_end   target_date
# 0 2018-08-25  10  2018-09-04      1
# 1 2018-07-21  7   2018-07-28      0