python - 两列之间的日期范围
问题描述
我对 Python 和数据科学有点陌生。
我有一个包含 2 个日期时间列的数据集,A
并且B
:
A B
0 2019-03-13 08:12:20 2019-03-13 08:12:25
1 2019-03-15 10:02:18 2019-03-13 10:02:20
对于每一行,我想在 A 列和 B 列之间生成以秒为单位的日期范围,因此我应该得到这个:
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
我使它与此一起使用:
import pandas as pd, numpy as np
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-15 10:02:18"], 'B': ["2019-03-13 08:12:25", "2019-03-13 10:02:20"]})
l=[pd.date_range(start=df.iloc[i]['A'], end=df.iloc[i]['B'], freq='S') for i in range(len(df))]
df1=(pd.DataFrame(l).T)[0]
print(df1)
但是因为我有 1M 行,所以运行时间太长而且我知道这个解决方案并不是最好的,你们能告诉我什么是最好的方法吗?
解决方案
这是必要的循环,一种可能的列表理解和展平解决方案:
l = [x for a, b in zip(df.A, df.B) for x in pd.date_range(a, b, freq='S')]
df1= pd.DataFrame({'A':l})
print(df1)
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
另一种解决方案:
df1 = (pd.concat([pd.Series(pd.date_range(r.A, r.B, freq='S')) for r in df.itertuples()])
.to_frame('A'))
print (df1)
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
推荐阅读
- sql - 将数据从临时表复制到另一个表
- javascript - 模板中的剑道 UI 条件
- php - 从 php 脚本在 Ubuntu 的 tmp 目录中创建文件
- excel - 使用 VBA 从数据透视表筛选器中删除项目
- c++ - Qt 拆分器自动调整大小
- android - Xamarin Listview 不遵循 rtl 方向
- android - Android 导航编辑器 - 完成活动?
- sql-server - PySpark:将 T-SQL Case When Then 语句转换为 PySpark
- python - 如何在 jinja2 中循环遍历 pandas 数据框的行和列?
- firebase - 如何增加 Cloud Firestore 中的现有数字字段