【问题标题】:Modifying a dataframe with day offset使用日期偏移量修改数据框
【发布时间】:2019-09-27 22:35:59
【问题描述】:

我正在处理一个非常大的数据框。下面是一个小样本:

import pandas as pd
df = pd.DataFrame({'nodes': ['A', 'B', 'C'],
                   'dept': ['20:00', '02:00', '21:00'],
                   'arrv': ['20:00', '17:00', '21:00'],
                   'dept_offset_day': [0, 1, 0],
                   'arrv_offset_day': [0, 1, 0],
'stop_num':[0,1,2]})
print(df)
 nodes   dept   arrv  dept_offset_day  arrv_offset_day
0     A  20:00  20:00                0                0
1     B  02:00  17:00                1                1
2     C  21:00  21:00                0                0

我正在尝试 1) 通过考虑日期偏移量将日期添加到开始时间和结束时间。 2)将节点列分为两个节点开始和节点结束列,即指向点。比如:

nodes_start   nodes_end       start_datetime       end_datetime 
     A           B           2019-5-9 20:00           2019-5-10 02:00     
     B           C           2019-5-10 17:00          2019-5-10 21:00     

我尝试使用 pd.offsets.Day() 并循环遍历每一行,但它使执行时间非常慢并且我得到错误的日期。感谢您的帮助。

【问题讨论】:

  • 第二个代码块中的日期部分是从哪里得到的?
  • 只是将 now() 添加到时间。
  • 你如何确定哪个节点是开始,哪个是结束?还是我们应该假设从上到下?

标签: python pandas dataframe timezone-offset


【解决方案1】:

尝试使用新列构建一个新的数据框(实际上是复制的列:D):

df2 = pd.DataFrame()
df2['nodes_start'] = df['nodes'][:2]
df2['nodes_end'] = df['nodes'][-2:].reset_index(drop=True)
df2['start_datetime'] = pd.to_datetime(df['arrv'][:2])
df2['end_datetime'] = pd.to_datetime(df['dept'][-2:].reset_index(drop=True))
df2['start_datetime'] = [df2['start_datetime'][0] - pd.Timedelta(days=1)] + [df2['start_datetime'][1]]
print(df2)

输出:

  nodes_start nodes_end      start_datetime        end_datetime
0           A         B 2019-05-09 20:00:00 2019-05-10 02:00:00
1           B         C 2019-05-10 17:00:00 2019-05-10 21:00:00

【讨论】:

    猜你喜欢
    • 2015-02-06
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多