python - 计算 Pandas 列中的日期列表
问题描述
我有一个 Pandas 数据框,包括日期时间中的两个日期列。我想在这个日期范围内生成一个日期列表作为一个新列,这样我可以稍后将条目分解为多行。
我尝试了以下列表理解。
orders_df['list_of_dates'] = [orders_df['start_date'] + timedelta(days=n) for n in range(orders_df['date_difference'])]
但是收到了以下消息
TypeError:“系列”对象不能解释为整数
对解决方案的任何想法将不胜感激。
解决方案
使用嵌套列表推导range
:
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]
如果需要也可以使用新列Index.repeat
,GroupBy.cumcount
用于计数器系列转换为时间增量to_timedelta
:
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
推荐阅读
- javascript - 使用jquery单独获取子div的id
- selenium - 如何减少在页面对象模型 Selenium 中初始化页面对象的时间
- javascript - 如何将本地函数附加到 Javascript 构造函数中的文档事件?
- python - 如何使用 pyodbc 删除列
- ios - UITextView的attributeText丢失了属性值
- javascript - 如何手动触发下拉更改事件?当我从 Modal 中选择数据时?
- generics - 返回 SELF 的 java 类的对象实例化不起作用
- python - 尝试绘制数组时出现 Unicode 错误?
- laravel - Laravel:在 API 上更改密码后登录失败
- spring - 在java代码中更新spring环境中的属性