在Pandas中插入行并在多索引DataFram上重新编制索引

2024-04-25 18:57:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大型面板数据框,其中包含多个日期的多个资产。问题是有些资产并不是每天都有价值的,所以我只希望将当天的空白值替换为该资产的最后可用值。在

例如:

                       tradeDate   assetId  ticker    Sedol      price
0        2016-01-04 00:00:00.000      1786    3900  B17N9P6        1   
1        2016-01-04 00:00:00.000      2041    1898  B1JNK84        2   
2        2016-01-04 00:00:00.000      2981    CBMG  B9F9PM1        3   
3        2016-01-04 00:00:00.000      3547     MWA  B15RZR4        4   
4        2016-01-04 00:00:00.000      3570    TPLM  B065Y40        5   
5        2016-01-05 00:00:00.000      3995    MHGC  B0YRYS2        1   
6        2016-01-05 00:00:00.000      4110     DSW  B0BV2V6        2   
7        2016-01-05 00:00:00.000      4874     NWE  B03PGL4        3   
8        2016-01-05 00:00:00.000      4982    BOFI  B0637D4        4   
9        2016-01-05 00:00:00.000      5082   ISCTR  B03MYS8        5   
10       2016-01-05 00:00:00.000      5083   KCHOL  B03MVJ8        6

所以我需要做的是索引tradeDate和assetId,然后重新编制索引,以便它为每个tradeDate创建新行,这样总有相同数量的assetId。这将使用nan创建行。我被这一步弄糊涂了,因为我不确定在使用多个索引时以及当列tradeDate和assetId不完全匹配时的语法。在

最后,我要用最后一个可用值替换nan。但是,我必须再次为tradeDate和assetId的两个索引执行此操作。感谢你的帮助


Tags: 数据面板nan资产price空白ticker价值
1条回答
网友
1楼 · 发布于 2024-04-25 18:57:05

你问题的第一部分被托马格巧妙地回答了here。在

基本上,您需要使用一个聪明的技巧,包括设置多重索引、拆散数据帧、填充缺失的值并再次堆叠。然后,您应该再次将填充的缺失值转换为NaNs,并使用在pandas中实现的.fillna()方法,用最后一个可用值替换NaNs。在

首先,让我们生成所需的数据:

import pandas as pd
import numpy as np

data =  [['2016-01-04 00:00:00.000', 1786, '3900', 'B17N9P6', 1],
['2016-01-04 00:00:00.000', 2041, '1898', 'B1JNK84', 2],
['2016-01-04 00:00:00.000', 2981, 'CBMG', 'B9F9PM1', 3],
['2016-01-04 00:00:00.000', 3547, 'MWA', 'B15RZR4', 4],
['2016-01-04 00:00:00.000', 3570, 'TPLM', 'B065Y40', 5],
['2016-01-05 00:00:00.000', 3995, 'MHGC', 'B0YRYS2', 1],
['2016-01-05 00:00:00.000', 4110, 'DSW', 'B0BV2V6', 2],
['2016-01-05 00:00:00.000', 4874, 'NWE', 'B03PGL4', 3],
['2016-01-05 00:00:00.000', 4982, 'BOFI', 'B0637D4', 4],
['2016-01-05 00:00:00.000', 5082, 'ISCTR', 'B03MYS8', 5],
['2016-01-05 00:00:00.000', 5083, 'KCHOL', 'B03MVJ8', 6]]

cols  = ['tradeDate','assetId','ticker','Sedol','price']

然后解决问题:

^{pr2}$

希望这个答案能涵盖你的问题,否则请告诉我们。在

相关问题 更多 >