pandas 数据框的最大值和最小值 [英] Pandas dataframe max and min value

查看:77
本文介绍了 pandas 数据框的最大值和最小值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个熊猫数据框,如下所示:

I have a pandas dataframe that looks like the following:

+-----+---+---+--+--+
|     | A | B |  |  |
+-----+---+---+--+--+
| 288 | 1 | 4 |  |  |
+-----+---+---+--+--+
| 245 | 2 | 3 |  |  |
+-----+---+---+--+--+
| 543 | 3 | 6 |  |  |
+-----+---+---+--+--+
| 867 | 1 | 9 |  |  |
+-----+---+---+--+--+
| 345 | 2 | 7 |  |  |
+-----+---+---+--+--+
| 122 | 3 | 8 |  |  |
+-----+---+---+--+--+
| 233 | 1 | 1 |  |  |
+-----+---+---+--+--+
| 346 | 2 | 6 |  |  |
+-----+---+---+--+--+
| 765 | 3 | 3 |  |  |
+-----+---+---+--+--+

我想做的是从"B"列中获取最大值和最小值,该值由"A"列中1到3的范围给出

What I want to do is get the max and min values from column 'B' given by the the range from 1 to 3 in column 'A'

例如:

loop on A in range 1 to 3:
       get max and min values from column 'B'
       max = 6
       min = 3
loop on the next range of A from 1 to 3:
       get max and min values from column 'B'
       max = 9
       min = 7           
loop on the next range of A from 1 to 3:
       get max and min values from column 'B'
       max = 6
       min = 1

并将最小值最大值添加到类似以下的列中:

and add the min max values to a column like:

+-----+---+---+--+----+
|     | A | B |min|max|
+-----+---+---+--+----+
| 288 | 1 | 4 | 3 | 6 |
+-----+---+---+--+----+
| 245 | 2 | 3 |   |   |
+-----+---+---+--+----+
| 543 | 3 | 6 |   |   |
+-----+---+---+--+----+
| 867 | 1 | 9 | 7 | 9 |
+-----+---+---+--+----+
| 345 | 2 | 7 |   |   |
+-----+---+---+--+----+
| 122 | 3 | 8 |   |   |
+-----+---+---+--+----+
| 233 | 1 | 1 | 1 | 6 |
+-----+---+---+--+----+
| 346 | 2 | 6 |   |   |
+-----+---+---+--+----+
| 765 | 3 | 3 |   |   |
+-----+---+---+--+----+

推荐答案

如果不需要空值:

g = df.groupby(np.arange(len(df.index)) // 3)
df['min'] = g.B.transform('min')
df['max'] = g.B.transform('max')
print (df)
     A  B  min  max
288  1  4    3    6
245  2  3    3    6
543  3  6    3    6
867  1  9    7    9
345  2  7    7    9
122  3  8    7    9
233  1  1    1    6
346  2  6    1    6
765  3  3    1    6

对于可能的空值,可以添加一个空格,但是然后将minmax列中的所有值也都转换为字符串:

For emty values is possible add empty spaces, BUT then all values in columns min and max are converted to strings too:

g = df.groupby(np.arange(len(df.index)) // 3)
df['min'] = g.B.transform('min')
df['max'] = g.B.transform('max')
df.loc[df.A != 1, ['min','max']] = ''
print (df)
     A  B min max
288  1  4   3   6
245  2  3        
543  3  6        
867  1  9   7   9
345  2  7        
122  3  8        
233  1  1   1   6
346  2  6        
765  3  3    

df['range']='range' + pd.Series(np.arange(len(df.index))//3 + 1, index=df.index).astype(str) 
g = df.groupby('range')
df['min'] = g.B.transform('min')
df['max'] = g.B.transform('max')
print (df)
     A  B   range  min  max
288  1  4  range1    3    6
245  2  3  range1    3    6
543  3  6  range1    3    6
867  1  9  range2    7    9
345  2  7  range2    7    9
122  3  8  range2    7    9
233  1  1  range3    1    6
346  2  6  range3    1    6
765  3  3  range3    1    6

使用 cumsum 布尔型掩码:

Another solution with cumsum of boolean mask:

df['range'] = 'range' + (df.A == 1).cumsum().astype(str)
g = df.groupby('range')
df['min'] = g.B.transform('min')
df['max'] = g.B.transform('max')
print (df)
     A  B   range  min  max
288  1  4  range1    3    6
245  2  3  range1    3    6
543  3  6  range1    3    6
867  1  9  range2    7    9
345  2  7  range2    7    9
122  3  8  range2    7    9
233  1  1  range3    1    6
346  2  6  range3    1    6
765  3  3  range3    1    6

这篇关于 pandas 数据框的最大值和最小值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆