将索引名称添加到数据框/系列

时间:2014-04-07 20:46:00

标签: python pandas

我不知道如何做以下事情! 有人解决方案吗?

我有以下数据框,其中TEST,DATE和PRODUCTS作为索引。我想在所有测试和日期中添加以下产品。例如,T3 = T2 + 1

>>> df
TEST      DATE        PRODUCTS
A1        2014-02-28  T_01        7.9
                      T_1         8.1
                      T_2         8.6
          2014-03-03  T_01        7.4
                      T_1         8.4
                      T_2         8.7
...

我想要:

>>> df
TEST      DATE        PRODUCTS
A1        2014-02-28  T_01        7.9
                      T_1         8.1
                      T_2         8.7
                      T_3         9.6
          2014-03-03  T_01        7.4
                      T_1         8.4
                      T_2         8.7
                      T_3         9.7
...

1 个答案:

答案 0 :(得分:1)

我认为您可以先unstack,然后再生成T_3stack

In [15]:

print df
                            0
TEST DATE       PRODUCTS     
A1   2014-02-28 T_01      7.9
                T_1       8.1
                T_2       8.6
     2014-03-03 T_01      7.4
                T_1       8.4
                T_2       8.7

[6 rows x 1 columns]
In [16]:

df2 = df.unstack()[0] #if the variable name is 0
df2['T_3']=df2['T_2']+1
df2.stack() #need to convert to a DataFrame, 
Out[16]:
TEST  DATE        PRODUCTS
A1    2014-02-28  T_01        7.9
                  T_1         8.1
                  T_2         8.6
                  T_3         9.6
      2014-03-03  T_01        7.4
                  T_1         8.4
                  T_2         8.7
                  T_3         9.7
dtype: float64

修改

备选方案是手动添加T_3级别:

In [37]:

df2=df.xs('T_2', level=2)+1
df2['PRODUCTS']='T_3'
df2.set_index('PRODUCTS', append=True, inplace=True)
df3=df.append(df2).sort_index()
In [38]:

print df3
                            0
TEST DATE       PRODUCTS     
A1   2014-02-28 T_01      7.9
                T_1       8.1
                T_2       8.6
                T_3       9.6
     2014-03-03 T_01      7.4
                T_1       8.4
                T_2       8.7
                T_3       9.7

[8 rows x 1 columns]