gpt4 book ai didi

python - Pandas :将日期范围解压缩为单个日期

转载 作者:太空狗 更新时间:2023-10-29 20:56:13 24 4
gpt4 key购买 nike

数据集:我有一个 1GB 的股票数据集,其值介于日期范围之间。日期范围没有重叠,数据集按(代码,开始日期)排序。

>>> df.head()
start_date end_date val
ticker
AAPL 2014-05-01 2014-05-01 10.0000000000
AAPL 2014-06-05 2014-06-10 20.0000000000
GOOG 2014-06-01 2014-06-15 50.0000000000
MSFT 2014-06-16 2014-06-16 None
TWTR 2014-01-17 2014-05-17 10.0000000000

目标:我想解压缩数据框,以便我有单独的日期而不是日期范围。例如,AAPL 行将从只有 2 行变为 7 行:

>>> AAPL_decompressed.head()
val
date
2014-05-01 10.0000000000
2014-06-05 20.0000000000
2014-06-06 20.0000000000
2014-06-07 20.0000000000
2014-06-08 20.0000000000

我希望 pandas 有一个很好的优化方法,例如 resample 可以在几行中完成此操作。

最佳答案

比几行多一点,但我认为它会导致您的要求:

从您的数据框开始:

In [70]: df
Out[70]:
start_date end_date val row
ticker
AAPL 2014-05-01 2014-05-01 10 0
AAPL 2014-06-05 2014-06-10 20 1
GOOG 2014-06-01 2014-06-15 50 2
MSFT 2014-06-16 2014-06-16 NaN 3
TWTR 2014-01-17 2014-05-17 10 4

首先,我将此数据框 reshape 为具有一个 date 列的数据框(因此,对于 start_dateend_date 的每个日期,每行重复两次(我添加了一个名为 row 的计数器列):

In [60]: df['row'] = range(len(df))
In [61]: starts = df[['start_date', 'val', 'row']].rename(columns={'start_date': 'date'})
In [62]: ends = df[['end_date', 'val', 'row']].rename(columns={'end_date':'date'})
In [63]: df_decomp = pd.concat([starts, ends])
In [64]: df_decomp = df_decomp.set_index('row', append=True)
In [65]: df_decomp.sort_index()
Out[65]:
date val
ticker row
AAPL 0 2014-05-01 10
0 2014-05-01 10
1 2014-06-05 20
1 2014-06-10 20
GOOG 2 2014-06-01 50
2 2014-06-15 50
MSFT 3 2014-06-16 NaN
3 2014-06-16 NaN
TWTR 4 2014-01-17 10
4 2014-05-17 10

基于这个新数据框,我可以按 tickerrow 对其进行分组,并对每个组应用每日 resample 并且fillna(使用方法 'pad' 进行前向填充)

In [66]: df_decomp = df_decomp.groupby(level=[0,1]).apply(lambda x: x.set_index('date').resample('D').fillna(method='pad'))

In [67]: df_decomp = df_decomp.reset_index(level=1, drop=True)

最后一个命令是删除现在多余的 row 索引级别。
当我们访问 AAPL 行时,它会提供您想要的输出:

In [69]: df_decomp.loc['AAPL']
Out[69]:
val
date
2014-05-01 10
2014-06-05 20
2014-06-06 20
2014-06-07 20
2014-06-08 20
2014-06-09 20
2014-06-10 20

关于python - Pandas :将日期范围解压缩为单个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com