熊猫:根据它上面的行设置一行的值

时间:2018-03-08 22:18:18

标签: python pandas

我有一个Pandas DataFrame temp_df,它有一堆列,包括7个滞后列(t-1, t-2, ..., t-7)。

             t-1      t-2   t-3      t-4    t-5     t-6      t-7
date                            
2010-01-08  81.0    104.0   124.0   5.0     113.0   34.0    101.0
2010-01-09  67.0    81.0    104.0   124.0   5.0     113.0   34.0
2010-01-10  89.0    67.0    81.0    104.0   124.0   5.0     113.0
2010-01-11  132.0   89.0    67.0    81.0    104.0   124.0   5.0
2010-01-12  105.0   132.0   89.0    67.0    81.0    104.0   124.0

我想将第二行的滞后列更改为与第一行的滞后列相同。理想情况下,改变后看起来像这样:

             t-1      t-2   t-3      t-4    t-5     t-6      t-7
date                            
2010-01-08  81.0    104.0   124.0   5.0     113.0   34.0    101.0
2010-01-09  81.0    104.0   124.0   5.0     113.0   34.0    101.0
2010-01-10  89.0    67.0    81.0    104.0   124.0   5.0     113.0
2010-01-11  132.0   89.0    67.0    81.0    104.0   124.0   5.0
2010-01-12  105.0   132.0   89.0    67.0    81.0    104.0   124.0

我试过这个:

lag_cols = ["t-" + str(i) for i in range(1,8)]
temp_df.iloc[1][lag_cols] = temp_df.iloc[0][lag_cols]

但它导致temp_df没有变化。

知道为什么会这样做/如何实现这种改变?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以像这样分配loc'个切片 -

df.loc[df.index[1], lag_cols] = df.loc[df.index[0], lag_cols]

df
              t-1    t-2    t-3    t-4    t-5    t-6    t-7
date                                                       
2010-01-08   81.0  104.0  124.0    5.0  113.0   34.0  101.0
2010-01-09   81.0  104.0  124.0    5.0  113.0   34.0  101.0
2010-01-10   89.0   67.0   81.0  104.0  124.0    5.0  113.0
2010-01-11  132.0   89.0   67.0   81.0  104.0  124.0    5.0
2010-01-12  105.0  132.0   89.0   67.0   81.0  104.0  124.0

请注意loc只接受标签,所以你需要跳过几个环节,但是非常可行。