gpt4 book ai didi

python - 有效地组合 pandas 数据框不同列上的最小值/最大值

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:04 26 4
gpt4 key购买 nike

我有一个 pandas 数据框,其中包含计算结果并且需要:

  • 取一列的最大值,并针对该值找到另一列的最大值
  • 取一列的最小值,并针对该值找到另一列的最大值

有没有更有效的方法?

设置

metrictuple = namedtuple('metrics', 'prob m1 m2')
l1 =[metrictuple(0.1, 0.4, 0.04),metrictuple(0.2, 0.4, 0.04),metrictuple(0.4, 0.4, 0.1),metrictuple(0.7, 0.2, 0.3),metrictuple(1.0, 0.1, 0.5)]
df = pd.DataFrame(l1)
# df
# prob m1 m2
#0 0.1 0.4 0.04
#1 0.2 0.4 0.04
#2 0.4 0.4 0.10
#3 0.7 0.2 0.30
#4 1.0 0.1 0.50

tmp = df.loc[(df.m1.max() == df.m1), ['prob','m1']]
res1 = tmp.loc[tmp.prob.max() == tmp.prob, :].to_records(index=False)[0]
#(0.4, 0.4)
tmp = df.loc[(df.m2.min() == df.m2), ['prob','m2']]
res2 = tmp.loc[tmp.prob.max() == tmp.prob, :].to_records(index=False)[0]
#(0.2, 0.04)

最佳答案

Pandas 并不适合数值计算。这是因为切片和选择数据会产生很大的开销,在此示例中是 df.loc

好消息是 pandasnumpy 交互良好,因此您可以轻松地下拉到底层 numpy 数组。

下面我定义了一些辅助函数,使代码更具可读性。请注意,numpy 切片是通过从 0 开始的行号和列号执行的。

arr = df.values

def arr_max(x, col):
return x[x[:,col]==x[:,col].max()]

def arr_min(x, col):
return x[x[:,col]==x[:,col].min()]

res1 = arr_max(arr_max(arr, 1), 0)[:,:2] # array([[ 0.4, 0.4]])
res2 = arr_max(arr_min(arr, 2), 0)[:,[0,2]] # array([[ 0.2 , 0.04]])

关于python - 有效地组合 pandas 数据框不同列上的最小值/最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48572965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com