首页 > 解决方案 > 创建包含特定列的最小值和最大值的新数据框时获得的值错误

问题描述

我有一个如下所示的数据框。我需要找到“ Chip_Current[uAmp] ”列的最小值和最大值我使用下面的代码创建了一个新的数据框,但出现了错误。

ValueError:通过了 2 列,传递的数据有 1 列。

data = [[DEEP_SLEEP_PVT['Chip_Current[uAmp]'].min()], [DEEP_SLEEP_PVT['Chip_Current[uAmp]'].max()]]
df_DS = pd.DataFrame(data, columns = ['MIN', 'MAX'])

DEEP_SLEEP_PVT 是我的数据透视表名称

运行 Jerzel 提供的代码后,输出将按预期进行。请看下文。

在此处输入图像描述

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


使用Series.aggregate,输出为Series,因此对于一行DataFrame将其转换为DataFrame并转置:

df1 = DEEP_SLEEP_PVT['Chip_Current[uAmp]'].agg(['min','max']).to_frame().T

如果需要每个其他列/级别的最小值和最大值,例如Device_IDuse GroupBy.agg

df2 = DEEP_SLEEP_PVT.groupby('Device_ID')['Chip_Current[uAmp]'].agg(['min','max'])

或按多个列/级别:

df3 = (DEEP_SLEEP_PVT.groupby(['Device_ID', 'Temp(deg)'])['Chip_Current[uAmp]']
                     .agg(['min','max']))

样本数据:

DEEP_SLEEP_PVT = (pd.DataFrame({'Chip_Current[uAmp]':[5,0,-1,2,3,2,1,-5,7,4.8],
                               'Device_ID':['FF_2646'] * 5 + ['TT_2438'] * 5,
                               'Temp(deg)':[-20]*3 + [25] * 2 + [-20]*3 + [25] * 2})
                    .set_index(['Device_ID','Temp(deg)']))
    
print (DEEP_SLEEP_PVT)
                     Chip_Current[uAmp]
Device_ID Temp(deg)                    
FF_2646   -20                       5.0
          -20                       0.0
          -20                      -1.0
           25                       2.0
           25                       3.0
TT_2438   -20                       2.0
          -20                       1.0
          -20                      -5.0
           25                       7.0
           25                       4.8

df1 = DEEP_SLEEP_PVT['Chip_Current[uAmp]'].agg(['min','max']).to_frame().T
print (df1)
                    min  max
Chip_Current[uAmp] -5.0  7.0

df2 = DEEP_SLEEP_PVT.groupby('Device_ID')['Chip_Current[uAmp]'].agg(['min','max'])
print (df2)
           min  max
Device_ID          
FF_2646   -1.0  5.0
TT_2438   -5.0  7.0

df3 = DEEP_SLEEP_PVT.groupby(['Device_ID', 'Temp(deg)'])['Chip_Current[uAmp]'].agg(['min','max'])
print (df3)
                     min  max
Device_ID Temp(deg)          
FF_2646   -20       -1.0  5.0
           25        2.0  3.0
TT_2438   -20       -5.0  2.0
           25        4.8  7.0

推荐阅读