2016-09-18 58 views
1

我已經分組了我的數據。現在,我試圖做的是從「高」列中選擇最高值,並在每週的「低」列中選擇最低值,然後使用最高值減去最低值來獲得範圍。但是代碼總是錯誤的。有人有我的想法?Python - 計算不同組中的範圍(最高 - 最低)

這裏我的數據框的一部分:

enter image description here

和我的錯誤代碼:

grouped=df.groupby('week') 
def Range(x,y): 
    return x.max()-y.min() 
grouped.agg(Range(grouped['high'],grouped['low'])) 

回答

1

這是你想要的嗎?

In [67]: df 
Out[67]: 
        Open  High   Low  Close Volume Adj Close  Week 
Date 
2015-09-14 116.580002 116.889999 114.860001 115.309998 58363400 112.896168 2015-09-18 
2015-09-15 115.930000 116.529999 114.419998 116.279999 43341200 113.845864 2015-09-18 
2015-09-16 116.250000 116.540001 115.440002 116.410004 37173500 113.973148 2015-09-18 
2015-09-17 115.660004 116.489998 113.720001 113.919998 64112600 111.535266 2015-09-18 
2015-09-18 112.209999 114.300003 111.870003 113.449997 74285300 111.075104 2015-09-18 
2015-09-21 113.669998 115.370003 113.660004 115.209999 50222000 112.798263 2015-09-25 
2015-09-22 113.379997 114.180000 112.519997 113.400002 50346200 111.026155 2015-09-25 
2015-09-23 113.629997 114.720001 113.300003 114.320000 35756700 111.926895 2015-09-25 
2015-09-24 113.250000 115.500000 112.370003 115.000000 50219500 112.592660 2015-09-25 
2015-09-25 116.440002 116.690002 114.019997 114.709999 56151900 112.308730 2015-09-25 

In [68]: df.groupby('Week').apply(lambda x: x.High.max() - x.Low.min()) 
Out[68]: 
Week 
2015-09-18 5.019996 
2015-09-25 4.319999 
dtype: float64 

設置DF:

In [75]: from pandas_datareader import data as web 

In [76]: df = web.DataReader('aapl', 'yahoo', '2015-09-14', '2015-09-25') 

In [77]: df.ix[:5, 'Week'] = df.index[df.index.weekday == 4][0] 

In [78]: df.ix[5:, 'Week'] = df.index[df.index.weekday == 4][-1] 

In [79]: df 
Out[79]: 
        Open  High   Low  Close Volume Adj Close  Week 
Date 
2015-09-14 116.580002 116.889999 114.860001 115.309998 58363400 112.896168 2015-09-18 
2015-09-15 115.930000 116.529999 114.419998 116.279999 43341200 113.845864 2015-09-18 
2015-09-16 116.250000 116.540001 115.440002 116.410004 37173500 113.973148 2015-09-18 
2015-09-17 115.660004 116.489998 113.720001 113.919998 64112600 111.535266 2015-09-18 
2015-09-18 112.209999 114.300003 111.870003 113.449997 74285300 111.075104 2015-09-18 
2015-09-21 113.669998 115.370003 113.660004 115.209999 50222000 112.798263 2015-09-25 
2015-09-22 113.379997 114.180000 112.519997 113.400002 50346200 111.026155 2015-09-25 
2015-09-23 113.629997 114.720001 113.300003 114.320000 35756700 111.926895 2015-09-25 
2015-09-24 113.250000 115.500000 112.370003 115.000000 50219500 112.592660 2015-09-25 
2015-09-25 116.440002 116.690002 114.019997 114.709999 56151900 112.308730 2015-09-25 
+0

沒錯!非常感謝你。我發現代碼'分組'['high']。max() - 分組['low']。min()'也可以工作 – Kai

+0

@Kai,很高興我能幫上忙。 :)請考慮upvoting/[接受](http://meta.stackexchange.com/a/5235)答案,如果你認爲它回答了你的問題 – MaxU

相關問題