Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫将多重指数重新编制为更高频率的日期_Python_Pandas - Fatal编程技术网

Python 熊猫将多重指数重新编制为更高频率的日期

Python 熊猫将多重指数重新编制为更高频率的日期,python,pandas,Python,Pandas,我有一个季度数据的ID和日期表,我想将其重新索引到每日(工作日) 示例表: 我正在尝试找出一种pythonic或pandas方法来重新索引到更高频率的日期范围,例如每日和向前填充任何NAN 到目前为止,我们已经尝试: df = pd.read_sql('select date, id, type, value from db_table' con=conn, index_col=['date', 'id', 'type']) dates = pd.bdate_range(start, end)

我有一个季度数据的ID和日期表,我想将其重新索引到每日(工作日)

示例表:

我正在尝试找出一种pythonic或pandas方法来重新索引到更高频率的日期范围,例如每日和向前填充任何NAN

到目前为止,我们已经尝试:

df = pd.read_sql('select date, id, type, value from db_table' con=conn, index_col=['date', 'id', 'type'])
dates = pd.bdate_range(start, end)
new_idx = pd.MultiIndex.from_product([dates, df.index.get_level_values(1), df.index.get_level_values(2)]
new_df = df.reindex(new_idx)

#this just hangs
new_df = new_df.groupby(level=1).fillna(method='ffill')
无济于事。我要么得到一个

异常:无法处理非唯一的多索引

或者,如果ID和类型之间的日期是一致的,那么单个日期会被复制多次(这听起来像个bug?)

最后,我只想按日期、id和类型对表进行分组,并在id和类型之间具有一致的日期索引


有没有办法在熊猫身上做到这一点

是,您可以使用
merge

new_idx_frame=new_idx.to_frame()
new_idx_frame.columns=['date', 'id', 'type']
Yourdf=df.reset_index().merge(new_idx_frame,how='right',sort =True).groupby('id').ffill()# here I am using toy data 
Out[408]: 
   id  date  type     value
0   1     1     1       NaN
1   1     1     2       NaN
2   2     1     1  666666.0
3   2     1     2   99999.0
4   1     2     1      -1.0
5   1     2     1      -1.0
6   1     2     2      -1.0
7   2     2     1   99999.0
8   2     2     2   99999.0

样本数据

df=pd.DataFrame({'date':[1,1,2,2],'id':[2,2,1,1],'type':[2,1,1,1],'value':[99999,666666,-1,-1]})
df=df.set_index(['date', 'id', 'type'])
new_idx = pd.MultiIndex.from_product([[1,2], [1,2],[1,2]])

文本的答案就快到了——谢谢你。唯一缺少的是在进行正向填充时按['id','type']进行分组

此外,在我的用例中创建新的多重索引时,应该具有唯一的值:

new_idx = pd.MultiIndex.from_product([dates, df.index.get_level_values(1).unique(), df.index.get_level_values(2).unique()])

@coldspeed我添加了我使用的示例数据:-)这并不能解决问题。我最终得到了一个数据帧,它在2014年12月31日对id 8重复t1,总共重复23次,对其他类型、日期等重复23次。也许构造新的多重索引是错误的?其中,以下日期是我的原始表格的最小/最大范围内的所有工作日
new\u idx=pd.MultiIndex.from\u产品([日期,df.index.get\u level\u值(1),df.index.get\u level\u值(2)])