栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

从数据框开始:

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号