我有一个看起来像
的Pandas DataFramecol1
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
谢谢!
答案 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