pandas multiindex将标签添加到索引级别 [英] pandas multiindex add labels to an index level

查看:66
本文介绍了pandas multiindex将标签添加到索引级别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有multiindex的熊猫数据框,如下所示:

I have a pandas dataframe with multiindex as the following:

                                TALLY
DAY        NODE          CLASS       
2018-02-04 pdk2r08o005   3        7.0
2018-02-05 pdk2r08o005   3       24.0
2018-02-06 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       28.0
2018-02-07 pdk2r08o005   3       24.0
2018-02-08 dsvtxvCsdbc02 3        3.0
           pdk2r08o005   3       24.0
2018-02-09 pdk2r08o005   3       24.0
2018-02-10 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       24.0
2018-02-11 pdk2r08o005   3       31.0
2018-02-12 pdk2r08o005   3       24.0
2018-02-13 pdk2r08o005   3       20.0
2018-02-14 dsvtxvCsdbc02 3        4.0
           pdk2r08o005   3       24.0
2018-02-15 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       24.0
2018-02-16 dsvtxvCsdbc02 3      121.0
           pdk2r08o005   3       26.0
2018-02-17 dsvtxvCsdbc02 3      401.0
           pdk2r08o005   3       24.0
2018-02-18 dsvtxvCsdbc02 3      327.0
           pdk2r08o005   3       24.0
2018-02-19 dsvtxvCsdbc02 3      164.0
           pdk2r08o005   3       24.0
2018-02-20 dsvtxvCsdbc02 3       26.0
           pdk2r08o005   3       38.0
2018-02-21 pdk2r08o005   3       24.0
2018-02-22 pdk2r08o005   3       24.0
2018-02-23 pdk2r08o005   3       24.0
                              ...
2018-03-01 pdk2r08o005   3       24.0
2018-03-02 pdk2r08o005   3       24.0
2018-03-03 pdk2r08o005   3       24.0
2018-03-04 pdk2r08o005   3       36.0
2018-03-05 pdk2r08o005   3       24.0
2018-03-06 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       24.0
2018-03-07 dsvtxvCsdbc02 3        8.0
           pdk2r08o005   3       24.0
2018-03-08 pdk2r08o005   3       31.0
2018-03-09 pdk2r08o005   3       24.0
2018-03-10 pdk2r08o005   3       24.0
2018-03-11 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       39.0
2018-03-12 pdk2r08o005   3       24.0
2018-03-13 pdk2r08o005   3       24.0
2018-03-14 dsvtxvCsdbc02 3        4.0
           pdk2r08o005   3       24.0
2018-03-15 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       24.0
2018-03-16 dsvtxvCsdbc02 3        2.0
           pdk2r08o005   3       24.0
2018-03-17 dsvtxvCsdbc02 3        4.0
           pdk2r08o005   3       24.0
2018-03-18 dsvtxvCsdbc02 3       12.0
                         9        2.0
           pdk2r08o005   3       24.0
2018-03-19 pdk2r08o005   3       44.0
2018-03-20 pdk2r08o005   3       24.0
2018-03-21 pdk2r08o005   3       18.0

[68行x 1列]

[68 rows x 1 columns]

在该数据集中,"DAY","NODE"和"CLASS"是索引的一部分.

In this dataset "DAY", "NODE" and "CLASS" are the part of index.

现在,我必须在" DAY "列中填写一些缺少的日期.

Now I have to fill in some missing dates in "DAY" column.

赞:

date_range = pd.date_range('02-06-2018','03-18-2018')
indices = pd.MultiIndex.from_product(dataset.index.levels)

如何使用此date_range将日期添加到数据集的索引中?

How to use this date_range to add dates to the indices of the dataset?

推荐答案

我已经找到答案了,如下所示:

I have figured out the answer for this and it is as follows:

按以下结构读取数据帧"df".

Read the dataframe "df" in following structure.

                     NODE  CLASS  TALLY
DAY                                    
2018-02-04    pdk2r08o005      3    7.0
2018-02-05    pdk2r08o005      3   24.0
2018-02-06  dsvtxvCsdbc02      3    2.0
2018-02-06    pdk2r08o005      3   28.0
2018-02-07    pdk2r08o005      3   24.0
2018-02-08  dsvtxvCsdbc02      3    3.0
2018-02-08    pdk2r08o005      3   24.0
2018-02-09    pdk2r08o005      3   24.0
2018-02-10  dsvtxvCsdbc02      3    2.0
2018-02-10    pdk2r08o005      3   24.0
2018-02-11    pdk2r08o005      3   31.0
2018-02-12    pdk2r08o005      3   24.0
2018-02-13    pdk2r08o005      3   20.0
2018-02-14  dsvtxvCsdbc02      3    4.0
2018-02-14    pdk2r08o005      3   24.0
2018-02-15  dsvtxvCsdbc02      3    2.0
2018-02-15    pdk2r08o005      3   24.0
2018-02-16  dsvtxvCsdbc02      3  121.0
2018-02-16    pdk2r08o005      3   26.0
2018-02-17  dsvtxvCsdbc02      3  401.0
2018-02-17    pdk2r08o005      3   24.0
2018-02-18  dsvtxvCsdbc02      3  327.0
2018-02-18    pdk2r08o005      3   24.0
2018-02-19  dsvtxvCsdbc02      3  164.0
2018-02-19    pdk2r08o005      3   24.0
2018-02-20  dsvtxvCsdbc02      3   26.0
2018-02-20    pdk2r08o005      3   38.0
2018-02-21    pdk2r08o005      3   24.0
2018-02-22    pdk2r08o005      3   24.0
2018-02-23    pdk2r08o005      3   24.0
                  ...    ...    ...
2018-03-01    pdk2r08o005      3   24.0
2018-03-02    pdk2r08o005      3   24.0
2018-03-03    pdk2r08o005      3   24.0
2018-03-04    pdk2r08o005      3   36.0
2018-03-05    pdk2r08o005      3   24.0
2018-03-06  dsvtxvCsdbc02      3    2.0
2018-03-06    pdk2r08o005      3   24.0
2018-03-07  dsvtxvCsdbc02      3    8.0
2018-03-07    pdk2r08o005      3   24.0
2018-03-08    pdk2r08o005      3   31.0
2018-03-09    pdk2r08o005      3   24.0
2018-03-10    pdk2r08o005      3   24.0
2018-03-11  dsvtxvCsdbc02      3    2.0
2018-03-11    pdk2r08o005      3   39.0
2018-03-12    pdk2r08o005      3   24.0
2018-03-13    pdk2r08o005      3   24.0
2018-03-14  dsvtxvCsdbc02      3    4.0
2018-03-14    pdk2r08o005      3   24.0
2018-03-15  dsvtxvCsdbc02      3    2.0
2018-03-15    pdk2r08o005      3   24.0
2018-03-16  dsvtxvCsdbc02      3    2.0
2018-03-16    pdk2r08o005      3   24.0
2018-03-17  dsvtxvCsdbc02      3    4.0
2018-03-17    pdk2r08o005      3   24.0
2018-03-18  dsvtxvCsdbc02      3   12.0
2018-03-18  dsvtxvCsdbc02      9    2.0
2018-03-18    pdk2r08o005      3   24.0
2018-03-19    pdk2r08o005      3   44.0
2018-03-20    pdk2r08o005      3   24.0
2018-03-21    pdk2r08o005      3   18.0

我正在像下面那样从表中读取它

I am reading it from table like following

df = pd.read_sql('select DAY,NODE,CLASS,TALLY FROM TABLE', con=cnx, index_col=['DAY'])
df.index = pd.to_datetime(dataset.index)

为给定的日期范围创建一个具有类似结构的新数据框"df1"

create a new dataframe "df1" with the similar structure for given date range

date_range = pd.date_range(start='02-01-2018',end='03-21-2018',name='DAY')
df1 = pd.DataFrame({"NODE":[np.nan],"CLASS":[np.nan],"TALLY":[np.nan]},index=date_range)

将新数据集追加到旧数据集

Append new dataset into old dadaset

df = df.append(df1)

获取多重索引

indices = pd.MultiIndex.from_product(df.index.levels)

重新索引数据集

df = df.reindex(indices,fill_value=0)

中提琴要求的数据结构是新的输出.

And viola the asked datastructure is the new output.

这篇关于pandas multiindex将标签添加到索引级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆