为了账号安全,请及时绑定邮箱和手机立即绑定

系列。最大值和 idxmax

系列。最大值和 idxmax

撒科打诨 2021-07-27 17:49:06
我试图获得最大值以及系列对象的相应索引。s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])s.max() 将返回最大值,而 s.idxmax() 将返回最大值的索引。有没有一种方法可以让我们获取值及其相应的索引?谢谢你。
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

自定义函数呢?就像是


import numpy as np

import pandas as pd


s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])


def Max_Argmax(series):  # takes as input your series

   values = series.values  # store numeric values

   indexes = series.index  # store indexes

   Argmax = np.argmax(values)  # save index of max

   return values[Argmax], indexes[Argmax] # return max and corresponding index


(max, index) = Max_Argmax(s)

我在我的电脑上运行它,我得到:


>>> s

a   -1.854440

b    0.302282

c   -0.630175

d   -1.012799

e    0.239437

dtype: float64


>>> max

0.3022819091746019


>>> index

'b'

希望能帮助到你!


查看完整回答
反对 回复 2021-08-03
?
湖上湖

TA贡献2003条经验 获得超2个赞

正如乔恩·克莱门茨所说:


In [3]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])

In [4]: x, y = s.agg(['max', 'idxmax'])

In [5]: x

Out[5]: 1.6339096862287581

In [6]: y

Out[6]: 'b'

In [7]: s

Out[7]: a    1.245039

        b    1.633910

        c    0.619384

        d    0.369604

        e    1.009942

        dtype: float64

响应请求元组:


def max_and_index(series):

    """Return a tuple of (max, idxmax) from a pandas.Series"""

    x, y = series.agg(['max', 'idxmax'])

    return x, y


t = max_and_idxmax(s)

print(t)

(1.6339096862287581, 'b')

print(type(t))

<class 'tuple'>

更小:


def max_and_idxmax(series):

    """Return a tuple of (max, idxmax) from a pandas.Series"""

    return series.max(), series.idxmax()

如果需要速度,请使用上面的numpy方法

import pandas as pd

import numpy as np



def max_and_index(series):

    x, y = series.agg(['max', 'idxmax'])

    return x, y


def max_and_idxmax(series):

    return series.max(), series.idxmax()


def np_max_and_argmax(series):

    return np.max(series.values), np.argmax(series.values)


def Max_Argmax(series):

   v = series.values

   i = series.index

   arg = np.argmax(v)

   return v[arg], i[arg]



a = []

for i in range(2,9,1):

    a.append(pd.Series(np.random.randint(0, 100, size=10**i)))

    print('{}\t{:>11,}'.format(i-2, 10**i))


# 0            100

# 1          1,000

# 2         10,000

# 3        100,000

# 4      1,000,000

# 5     10,000,000

# 6    100,000,000


idx = 5

%%timeit -n 2 -r 10

max_and_index(a[idx])

# 144 ms ± 5.45 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)


%%timeit -n 2 -r 10

max_and_idxmax(a[idx])

# 143 ms ± 5.14 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)


%%timeit -n 2 -r 10

Max_Argmax(a[idx])

# 9.89 ms ± 1.13 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)


%%timeit -n 2 -r 10

np_max_and_argmax(a[idx])

# 24.5 ms ± 1.74 ms per loop (mean ± std. dev. of 10 runs, 2 loops each)


查看完整回答
反对 回复 2021-08-03
  • 2 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信