2017-08-01 50 views
1

的列值的變化差我有一個數據幀(DF)等作爲下面的(只是例子),也有可能10個或更多dataframes:python2.7:用於數據幀

 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'的變化百分比時,例外情況爲'2010-01-08'中b的值'應該是10次,就在這個時候,其他日期應該使用原始值,我的意思是沒有10次。一般來說,我通過以下代碼計算變化百分比:

​​

但是當日期是:'2010-01-09'。 我認爲代碼應該是:

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

你能告訴我怎麼用這個問題處理?

謝謝!

回答

1

您可以通過條件使用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 
+0

謝謝,我想改變基於日期的價值,不是基於價值,也許不應該改變日期。例如有兩次應該更改:'2010-01-09'和2011-01-09。請考慮工作日。 – tktktk0711

+0

請檢查編輯答案 – jezrael

+0

感謝您的答覆,我只想在日期爲'2010-01-08'時暫時更改b的值,當我們想要在日期'2010-01中獲取b的更改百分比時-09' 。我的意思是在日期'2010-01-10'中獲得b的百分比變化時,使用日期'2010-01-09'中b的原始值。與日期相同'2010-01-08' – tktktk0711