Pandas dataframe, how to find a very specific max values?

Peter Otten __peter__ at web.de
Tue May 30 16:33:25 EDT 2017


zljubisic at gmail.com wrote:

> I have a dataframe:
> 
> 
> df = pd.DataFrame({
>    'x': [3,4,5,8,10,11,12,13,15,16,18,21,24,25],
>    'a': [10,9,16,4,21,5,3,17,11,5,21,19,3,9]
> })
> 
> df
> Out[30]:
>      a   x
> 0   10   3
> 1    9   4
> 2   16   5
> 3    4   8
> 4   21  10
> 5    5  11
> 6    3  12
> 7   17  13
> 8   11  15
> 9    5  16
> 10  21  18
> 11  19  21
> 12   3  24
> 
> 
> for every "x" value I should subtract a certain number (say 3), and then
> find a maximum "a" value where x is in a range from x-3 to x.
> 
> For example:
> index,  x,    x-3,   max(a) where x is between x-3 and x
> 0, 	3, 	0,	10
> 1,	4,	1,	10
> 2,	5,	2,	16
> 3,	8,	5,	16
> 4,     10,      7,      21
> ...
> 
> "x" is incremental, "a" is random
> How to find max "a" values?

I have no idea how you'd do that in pandas.
Here's generic Python:

>>> m = df.as_matrix()
>>> pd.DataFrame(
... [[x, x-3, max(aa for aa, xx in m if x-3<=xx<=x)] for a, x in m],
... columns=["x", "x-3", "max(a)..."]
... )
     x  x-3  max(a)...
0    3    0         10
1    4    1         10
2    5    2         16
3    8    5         16
4   10    7         21
5   11    8         21
6   12    9         21
7   13   10         21
8   15   12         17
9   16   13         17
10  18   15         21
11  21   18         21
12  24   21         19
13  25   22          9

[14 rows x 3 columns]
>>> 





More information about the Python-list mailing list