在Python语言中,我有一个Pandas 时间戳列表,例如,考虑下面的输入提示input: list[list[pd.Timestamp]]

import pandas as pd
import numpy as np

# Example list of lists of Pandas Timestamps
input = [[pd.Timestamp('2023-09-01 10:00:00'), pd.Timestamp('2023-09-01 11:00:00')],
        [pd.Timestamp('2023-09-02 12:00:00'), pd.Timestamp('2023-09-02 13:00:00')],
        [pd.Timestamp('2023-09-03 14:00:00'), pd.Timestamp('2023-09-03 15:00:00')]]

此输入表示日期时间范围的列表. 为了调试和简单起见,我倾向于将此信息作为数据帧来查看:

input_df = pd.DataFrame(input, columns=[['left', 'right']])

现在我需要:

  1. 平坦化输入
  2. 删除重复项
  3. 应用相同的字符串格式(以矢量化的方式,例如对所有元素应用strftime("%Y/%m/%d/%H"))

现在,我应该在Pandas、Numpy(因为所有元素都是同一类型的元素)中执行此操作,还是在Python中执行此操作? 最快、最优雅的方式是什么?

推荐答案

如果需要获取左列和右列之间的所有小时数(如果差值应为2小时或更长),请使用:

#remove nested list in columns names for avoid MultiIndex
input_df = pd.DataFrame(input, columns=['left', 'right'])

#substract columns and convert to hours difference
repeat = input_df['right'].sub(input_df['left']).dt.total_seconds().div(3600).add(1)

#repeat left column
s = input_df.loc[input_df.index.repeat(repeat), 'left']

#add counter by hours, remove dupes and convert to custom format
out = (s.add(pd.to_timedelta(s.groupby(s).cumcount(), unit='H')).drop_duplicates()
               .dt.strftime("%Y/%m/%d/%H").tolist())

print (out)
['2023/09/01/10', '2023/09/01/11', '2023/09/02/12',
 '2023/09/02/13', '2023/09/03/14', '2023/09/03/15']

如果差异不重要并且只需要展开值,请使用NumPy:

input_df = pd.DataFrame(input, columns=['left', 'right'])

out = pd.Series(np.unique(np.ravel(input_df[['left','right']]))).dt.strftime("%Y/%m/%d/%H").tolist()
print (out)
['2023/09/01/10', '2023/09/01/11', '2023/09/02/12', 
 '2023/09/02/13', '2023/09/03/14', '2023/09/03/15']

Python相关问答推荐

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

通过优化空间在Python中的饼图中添加标签

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

标题:如何在Python中使用嵌套饼图可视化分层数据?

pandas滚动和窗口中有效观察的最大数量

如何让程序打印新段落上的每一行?

Python键入协议默认值

如何更改分组条形图中条形图的 colored颜色 ?

Python逻辑操作作为Pandas中的条件

Maya Python脚本将纹理应用于所有对象,而不是选定对象

人口全部乱序 - Python—Matplotlib—映射

如何获得3D点的平移和旋转,给定的点已经旋转?

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

如何在Django模板中显示串行化器错误

在matplotlib中重叠极 map 以创建径向龙卷风图

对当前的鼹鼠进行编码,并且我的按键获得了注册

将参数从另一个python脚本中传递给main(argv

根据边界点的属性将图划分为子图

Pandas:根据相邻行之间的差异过滤数据帧