Python 合并多个列表并找到最大值

Python 合并多个列表并找到最大值,python,pandas,Python,Pandas,pandas能否合并多个读数列表并返回aoiFeatures中元素的最大读数值 鉴于: # FYI: 2.4 million elements in each of these lists in reality allFeatures = [101, 179, 181, 183, 185, 843, 845, 847, 849, 851] allReadings1 = [0.27, 0.25, 0.13, 0.04, 0.05, 0.09, 0.15, 0.13, 0.12, 0.20] a

pandas能否合并多个读数列表并返回aoiFeatures中元素的最大读数值

鉴于:

# FYI: 2.4 million elements in each of these lists in reality
allFeatures =  [101, 179, 181, 183, 185, 843, 845, 847, 849, 851] 
allReadings1 = [0.27, 0.25, 0.13, 0.04, 0.05, 0.09, 0.15, 0.13, 0.12, 0.20]
allReadings2 = [0.25, 0.06, 0.29, 0.29, 0.04, 0.21, 0.07, 0.06, 0.07, 0.06]
allReadings3 = [0.12, 0.02, 0.20, 0.27, 0.04, 0.08, 0.11, 0.24, 0.00, 0.13]
allReadings4 = [0.21, 0.00, 0.22, 0.11, 0.24, 0.16, 0.11, 0.18, 0.27, 0.14]
allReadings5 = [0.02, 0.18, 0.26, 0.22, 0.23, 0.15, 0.24, 0.28, 0.00, 0.07]
allReadings6 = [0.08, 0.25, 0.21, 0.23, 0.14, 0.21, 0.18, 0.09, 0.17, 0.27]
allReadings7 = [0.20, 0.02, 0.28, 0.16, 0.18, 0.27, 0.29, 0.19, 0.29, 0.13]
allReadings8 = [0.17, 0.01, 0.07, 0.23, 0.14, 0.20, 0.19, 0.01, 0.15, 0.17]
allReadings9 = [0.12, 0.18, 0.09, 0.10, 0.00, 0.03, 0.11, 0.03, 0.14, 0.14]
allReadings10 =[0.13, 0.03, 0.20, 0.13, 0.30, 0.30, 0.28, 0.12, 0.19, 0.22]

# FYI: 67,000 elements in this list in reality
aoiFeatures = [181, 843, 849]
结果:

181 0.29
843 0.27
849 0.29

首先
zip
所有列表连同
DataFrame
构造函数和
index
参数,按
loc
选择行并获取
max
值:

L = list(zip(allReadings1,
             allReadings2,
             allReadings3,
             allReadings4,
             allReadings5,
             allReadings6,
             allReadings7,
             allReadings8,
             allReadings9,
             allReadings10))

df = pd.DataFrame(L, index=allFeatures)
print (df)
        0     1     2     3     4     5     6     7     8     9
101  0.27  0.25  0.12  0.21  0.02  0.08  0.20  0.17  0.12  0.13
179  0.25  0.06  0.02  0.00  0.18  0.25  0.02  0.01  0.18  0.03
181  0.13  0.29  0.20  0.22  0.26  0.21  0.28  0.07  0.09  0.20
183  0.04  0.29  0.27  0.11  0.22  0.23  0.16  0.23  0.10  0.13
185  0.05  0.04  0.04  0.24  0.23  0.14  0.18  0.14  0.00  0.30
843  0.09  0.21  0.08  0.16  0.15  0.21  0.27  0.20  0.03  0.30
845  0.15  0.07  0.11  0.11  0.24  0.18  0.29  0.19  0.11  0.28
847  0.13  0.06  0.24  0.18  0.28  0.09  0.19  0.01  0.03  0.12
849  0.12  0.07  0.00  0.27  0.00  0.17  0.29  0.15  0.14  0.19
851  0.20  0.06  0.13  0.14  0.07  0.27  0.13  0.17  0.14  0.22

aoiFeatures = [181, 843, 849]
s = df.loc[aoiFeatures].max(axis=1)
print (s)
181    0.29
843    0.30
849    0.29
dtype: float64

首先
zip
所有列表连同
DataFrame
构造函数和
index
参数,按
loc
选择行并获取
max
值:

L = list(zip(allReadings1,
             allReadings2,
             allReadings3,
             allReadings4,
             allReadings5,
             allReadings6,
             allReadings7,
             allReadings8,
             allReadings9,
             allReadings10))

df = pd.DataFrame(L, index=allFeatures)
print (df)
        0     1     2     3     4     5     6     7     8     9
101  0.27  0.25  0.12  0.21  0.02  0.08  0.20  0.17  0.12  0.13
179  0.25  0.06  0.02  0.00  0.18  0.25  0.02  0.01  0.18  0.03
181  0.13  0.29  0.20  0.22  0.26  0.21  0.28  0.07  0.09  0.20
183  0.04  0.29  0.27  0.11  0.22  0.23  0.16  0.23  0.10  0.13
185  0.05  0.04  0.04  0.24  0.23  0.14  0.18  0.14  0.00  0.30
843  0.09  0.21  0.08  0.16  0.15  0.21  0.27  0.20  0.03  0.30
845  0.15  0.07  0.11  0.11  0.24  0.18  0.29  0.19  0.11  0.28
847  0.13  0.06  0.24  0.18  0.28  0.09  0.19  0.01  0.03  0.12
849  0.12  0.07  0.00  0.27  0.00  0.17  0.29  0.15  0.14  0.19
851  0.20  0.06  0.13  0.14  0.07  0.27  0.13  0.17  0.14  0.22

aoiFeatures = [181, 843, 849]
s = df.loc[aoiFeatures].max(axis=1)
print (s)
181    0.29
843    0.30
849    0.29
dtype: float64
选择1 您可以让Python的
max
完成工作,并使用
pandas.Series
保存结果

readings = [allReadings1, allReadings2, allReadings3, allReadings4, allReadings5,
            allReadings6, allReadings7, allReadings8, allReadings9, allReadings10]

s = pd.Series(dict(zip(allFeatures, map(max, zip(*readings)))))
s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64

选择2 或是杠杆作用

readings = [allReadings1, allReadings2, allReadings3, allReadings4, allReadings5,
            allReadings6, allReadings7, allReadings8, allReadings9, allReadings10]

s = pd.Series(np.max(readings, 0), allFeatures)
s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64

如果需要用新读数更新最大值数组

allReadings11 =[0.13, 0.03, 0.30, 0.13, 0.30, 0.30, 0.28, 0.12, 0.19, 0.22]
s[:] = np.maximum(s, allReadings11)

s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64
选择1 您可以让Python的
max
完成工作,并使用
pandas.Series
保存结果

readings = [allReadings1, allReadings2, allReadings3, allReadings4, allReadings5,
            allReadings6, allReadings7, allReadings8, allReadings9, allReadings10]

s = pd.Series(dict(zip(allFeatures, map(max, zip(*readings)))))
s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64

选择2 或是杠杆作用

readings = [allReadings1, allReadings2, allReadings3, allReadings4, allReadings5,
            allReadings6, allReadings7, allReadings8, allReadings9, allReadings10]

s = pd.Series(np.max(readings, 0), allFeatures)
s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64

如果需要用新读数更新最大值数组

allReadings11 =[0.13, 0.03, 0.30, 0.13, 0.30, 0.30, 0.28, 0.12, 0.19, 0.22]
s[:] = np.maximum(s, allReadings11)

s[aoiFeatures]

181    0.29
843    0.30
849    0.29
dtype: float64

非常简单和快速的任务:

pd.DataFrame([allReadings1, allReadings2,...],columns=allFeatures).max()
样本输出:


非常简单快速的任务:

pd.DataFrame([allReadings1, allReadings2,...],columns=allFeatures).max()
样本输出:


LMAO。。。唉,我揭露了我在构建数据框架方面的挣扎,以供大家消遣:#L=np.transpose(列表(zip(所有阅读1,所有阅读2,所有阅读3,所有阅读4,所有阅读5,所有阅读6,所有阅读7,所有阅读8,所有阅读9,所有阅读10))@杰克,你很幸运,只有15分钟。我要。。。唉,我揭露了我在构建数据框架方面的挣扎,以供大家消遣:#L=np.transpose(列表(zip(所有阅读1,所有阅读2,所有阅读3,所有阅读4,所有阅读5,所有阅读6,所有阅读7,所有阅读8,所有阅读9,所有阅读10))@杰克,你很幸运,只有15分钟。我现在想知道哪一个最快。。。我猜是选项2。历史:我发现在SQL/Server中使用pyodbc+cursor和存储过程的速度有多慢(32分钟),所以在这一点上任何东西都是一种改进!我会将数据(见参考资料)输入到所有这些解决方案中,并让你们知道。@Jack听起来你们可能想检查一下,看看如果你们的起点是SQL表,它是否提供了任何可以使用的东西…@Jon Clements-谢谢!起点是一组屏蔽数组。我现在想知道哪一个最快。。。我猜是选项2。历史:我发现在SQL/Server中使用pyodbc+cursor和存储过程的速度有多慢(32分钟),所以在这一点上任何东西都是一种改进!我会将数据(见参考资料)输入到所有这些解决方案中,并让你们知道。@Jack听起来你们可能想检查一下,看看如果你们的起点是SQL表,它是否提供了任何可以使用的东西…@Jon Clements-谢谢!起点是屏蔽数组的集合。@jezrael-loc[]次:加载42MM元素:0:01:07.8;67K元素的生成最大值:0:00:04。8@piRSquared-选项#1 python max()次:加载42MM元素:0:00:02.2;67K元素的生成最大值:0:01:41。8@piRSquared-选项#2 numpy max()次:加载42MM元素:0:00:02.2;构建67K元素的最大值:0:00:00.6所以,伙计们。。。为什么会这样?(在Windows 10上运行64位python 3.6;8-i7内核@3.6 GHz;24 GB内存)@jezrael-loc[]次:加载42MM元素:0:01:07.8;67K元素的生成最大值:0:00:04。8@piRSquared-选项#1 python max()次:加载42MM元素:0:00:02.2;67K元素的生成最大值:0:01:41。8@piRSquared-选项#2 numpy max()次:加载42MM元素:0:00:02.2;构建67K元素的最大值:0:00:00.6所以,伙计们。。。为什么会这样?(在Windows 10上运行64位python 3.6;8-i7内核@3.6 GHz;24 GB内存)