首页 > 解决方案 > 从 Python 中的字典中的 pandas 数据帧中获取最小值和最大值

问题描述

我有一个字典 ( pollution),其中一个键我希望忽略 ( chemical_start_time),所有其他键的值都是 pandas 数据帧。

我想获得任何数据帧中存在的最大值和最小非零值。

我相信下面的代码正是这样做的,但我正在寻找最有效或“pythonic”的方式来做到这一点

import numpy as np

max_pols = []
min_pols = []

for key, df in pollution.items():
    if key != 'chemical_start_time':
        max_pols.append(max(df.max()))
        min_pols.append(np.nanmin(df[df > 0].min()))

max_pol = max(max_pols)
min_pol = min(min_pols)

标签: pythonpandasnumpydataframedictionary

解决方案


一种可能的提高性能的解决方案是使用numpy.ravel来自 DataFrame 的所有值的一维数组,然后使用np.min(如果可能缺少值np.nanmin)和np.max

df1 = pd.DataFrame({
         'C':[7,8,9,4,2,3],
         'D':[10,3,5,-7,10,0],
         'E':[5,-3,6,9,2,4],
})

df2 = pd.DataFrame({
         'A':[73,8,9,4,2,3],
         'D':[1,3,52,-7,1,0],
         'E':[53,-33,63,9,2,4],
})
pollution = {'a':df1, 'b':df2, 'chemical_start_time':pd.DataFrame([100])}

max_pols = []
min_pols = []

for key, df in pollution.items():
    if key != 'chemical_start_time':
        v = df.values.ravel()
        max_pols.append(np.max(v))
        min_pols.append(np.min(v[v > 0]))

max_pol = np.max(max_pols)
min_pol = np.min(min_pols)

print (max_pol)
73
print (min_pol)
1

推荐阅读