python2.7:更改dataframe的列值的差异

时间:2017-08-01 07:13:12

标签: python-2.7 dataframe

我有一个数据帧(df),如下所示(只是示例),可能有10个或更多数据帧:

     date              a       b
  0     2010-01-01     12      15
  1     2010-01-02     13      20
  2     2010-01-03     14      23
  3     2010-01-04     15      24
  4     2010-01-05     16      25
  5     2010-01-08     17      15
  6     2010-01-09     180     160
  ................................
  1000     2013-01-05     310     320

我想计算数据框中b列值的变化百分比。 但有一个例外,那就是日期是2010-01-09' (仅举例),并计算b' 2010-01-09'的变化百分比。 ,b' 2010-01-08'应该是10次,就在这个时候,其他日期应该使用原值,我的意思是没有10次。通常,我通过以下代码计算变化百分比:

df['b_diff'] = df2['b']/(df2['b'].shift() -1

但是当日期是:' 2010-01-09'。     我认为代码应该是:

 df['b_diff'] = df2['b']/10*(df2['b'].shift()) -1 

你能告诉我如何处理这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用pct_change,但首先按条件划分b的值:

dates = ['2010-01-09','2011-01-09']
m = df2['date'].isin(dates)
df2.loc[m, 'b'] =  df2['b'] / 10

df2['b_diff'] = df2['b'].pct_change()
print (df2)
        date    a     b    b_diff
0 2010-01-01   12  15.0       NaN
1 2010-01-02   13  20.0  0.333333
2 2010-01-03   14  23.0  0.150000
3 2010-01-04   15  24.0  0.043478
4 2010-01-05   16  25.0  0.041667
5 2010-01-08   17  15.0 -0.400000
6 2010-01-09  180  16.0  0.066667

替代解决方案:

dates = ['2010-01-09','2011-01-09']
m = df2['date'].isin(dates)

df2['b'] = df2['b'].mask(m, df2['b'] / 10)
df2['b_diff'] = df2['b'].pct_change()
print (df2)
        date    a     b    b_diff
0 2010-01-01   12  15.0       NaN
1 2010-01-02   13  20.0  0.333333
2 2010-01-03   14  23.0  0.150000
3 2010-01-04   15  24.0  0.043478
4 2010-01-05   16  25.0  0.041667
5 2010-01-08   17  15.0 -0.400000
6 2010-01-09  180  16.0  0.066667