熊猫:解压缩日期范围个别日期

熊猫:解压缩日期范围个别日期,第1张

熊猫:解压缩日期范围个别日期

几行多一点,但是我认为这导致了您的要求:

数据框开始:

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

首先,我重塑这个数据帧的数据帧与一个

date
列(所以每一行重复的每个日期两次
start_date
end_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  valticker rowAAPL   0   2014-05-01   10       0   2014-05-01   10       1   2014-06-05   20       1   2014-06-10   20GOOG   2   2014-06-01   50       2   2014-06-15   50MSFT   3   2014-06-16  NaN       3   2014-06-16  NaNTWTR   4   2014-01-17   10       4   2014-05-17   10

根据这个新的数据框,我可以按

ticker
和对其进行分组
row
,并每天
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]: valdate2014-05-01   102014-06-05   202014-06-06   202014-06-07   202014-06-08   202014-06-09   202014-06-10   20


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存