如何在熊猫的某些特定日期之前和之后获取日期时间?

时间:2016-06-14 12:11:09

标签: python pandas

我有一个看起来像

的Pandas DataFrame
col1
2015-02-02
2015-04-05
2016-07-02

我想为第1列中的每个日期添加{1}}天之前和x天之后的x天。

这意味着生成的DataFrame将包含更多行(特别是n(1 + 2 * x),其中n是col1中日期的原始数量)

我怎样才能以适当的Pandonic方式做到这一点?

输出(对于x=1

col1
2015-01-01
2015-01-02
2015-01-03
2015-04-04
etc

谢谢!

2 个答案:

答案 0 :(得分:1)

这样的事情需要一个带有datetime.date列的数据框,然后将另一个Series堆叠在一起,并timedelta移位到原始数据。

import datetime
import pandas as pd
df = pd.DataFrame([{'date': datetime.date(2016, 1, 2)}, {'date': datetime.date(2016, 1, 1)}], columns=['date'])
df = pd.concat([df.date, df.date + datetime.timedelta(days=1)], ignore_index=True).to_frame()

答案 1 :(得分:1)

你可以这样做,但我不确定它是最好/最快的方式:

In [143]: df
Out[143]:
        col1
0 2015-02-02
1 2015-04-05
2 2016-07-02

In [144]: %paste
N = 2
(df.col1.apply(lambda x: pd.Series(pd.date_range(x - pd.Timedelta(days=N),
                                                 x + pd.Timedelta(days=N))
                         )
         )
        .stack()
        .drop_duplicates()
        .reset_index(level=[0,1], drop=True)
        .to_frame(name='col1')
)
## -- End pasted text --
Out[144]:
         col1
0  2015-01-31
1  2015-02-01
2  2015-02-02
3  2015-02-03
4  2015-02-04
5  2015-04-03
6  2015-04-04
7  2015-04-05
8  2015-04-06
9  2015-04-07
10 2016-06-30
11 2016-07-01
12 2016-07-02
13 2016-07-03
14 2016-07-04
相关问题