Python - calculating the range(highest - lowest) in different group
<p>I have grouped my data. Now, what I am trying to do is to select the highest from the 'high' column and select the lowest from the 'low' column in each week, then use the highest to minus the lowest to get the range.  But the code is always wrong. Somebody has an idea for me?</p>

<p>Here a part of my DataFrame:</p>

<p><a href="http://i.stack.imgur.com/fzKX5.png" rel="nofollow"><img src="http://i.stack.imgur.com/fzKX5.png" alt="enter image description here"></a></p>

<p>and my wrong code:</p>

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

<p>Is that what you want?</p>

<pre><code>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
</code></pre>

<p><strong>Setup DF:</strong></p>

<pre><code>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
</code></pre>

python pandas dataframe group-by