Python 计算列中的日期列表
我有一个数据框架,包括datetime中的两个Date列。我想在这个date rage中生成一个日期列表作为一个新列,这样我可以在以后将条目分解成多行 我尝试了下面的列表Python 计算列中的日期列表,python,pandas,list,dataframe,timedelta,Python,Pandas,List,Dataframe,Timedelta,我有一个数据框架,包括datetime中的两个Date列。我想在这个date rage中生成一个日期列表作为一个新列,这样我可以在以后将条目分解成多行 我尝试了下面的列表 orders_df['list_of_dates'] = [orders_df['start_date'] + timedelta(days=n) for n in range(orders_df['date_difference'])] 但收到了以下消息 TypeError:“Series”对象不能解释为整数 如果您对解决
orders_df['list_of_dates'] = [orders_df['start_date'] + timedelta(days=n) for n in range(orders_df['date_difference'])]
但收到了以下消息
TypeError:“Series”对象不能解释为整数
如果您对解决方案有任何想法,我们将不胜感激。将嵌套列表理解与
范围一起使用
:
from datetime import timedelta
rng = pd.date_range('2017-04-03', periods=5)
orders_df = pd.DataFrame({'start_date': rng, 'date_difference': 2})
orders_df['list_of_dates'] = [[d + timedelta(days=x) for x in range(n)]
for d, n
in zip(orders_df['start_date'],
orders_df['date_difference'])]
print (orders_df)
start_date date_difference list_of_dates
0 2017-04-03 2 [2017-04-03 00:00:00, 2017-04-04 00:00:00]
1 2017-04-04 2 [2017-04-04 00:00:00, 2017-04-05 00:00:00]
2 2017-04-05 2 [2017-04-05 00:00:00, 2017-04-06 00:00:00]
3 2017-04-06 2 [2017-04-06 00:00:00, 2017-04-07 00:00:00]
4 2017-04-07 2 [2017-04-07 00:00:00, 2017-04-08 00:00:00]
如果需要,也可以使用新列,通过以下方式将计数器系列转换为时间增量:
您应该在您的for loophi@jezrael的
range()
中使用序列形状,您的代码生成一个日期金字塔列表,而不管date\u差异
:(@SomeBruh-您使用最新版本吗?如果检查数据样本,我工作正常。是,替换date\u差异:范围(1,6)
带有日期差异:0
你就会明白我的意思了
df = orders_df.loc[orders_df.index.repeat(orders_df['date_difference'])]
g = df.groupby(level=0).cumcount()
df['new'] = df['start_date'] + pd.to_timedelta(g, unit='d')
df = df.reset_index(drop=True)
print (df)
start_date date_difference new
0 2017-04-03 2 2017-04-03
1 2017-04-03 2 2017-04-04
2 2017-04-04 2 2017-04-04
3 2017-04-04 2 2017-04-05
4 2017-04-05 2 2017-04-05
5 2017-04-05 2 2017-04-06
6 2017-04-06 2 2017-04-06
7 2017-04-06 2 2017-04-07
8 2017-04-07 2 2017-04-07
9 2017-04-07 2 2017-04-08