我有一个数据帧(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
你能告诉我如何处理这个问题吗?
谢谢!
答案 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