如何转变熊猫' DataFrame.groupby()结果为MultiIndex

时间:2016-06-29 18:00:49

标签: pandas

假设我有一组通过改变两个参数knob_bknob_2获得的测量值(实际上还有更多):

data = np.empty((6,3), dtype=np.float)
data[:,0] = [3,4,5,3,4,5]
data[:,1] = [1,1,1,2,2,2]
data[:,2] = np.random.random(6)
df = pd.DataFrame(data, columns=['knob_1', 'knob_2', 'signal'])

即,df

   knob_1  knob_2    signal
0       3       1  0.076571
1       4       1  0.488965
2       5       1  0.506059
3       3       2  0.415414
4       4       2  0.771212
5       5       2  0.502188

现在,考虑每个参数本身,我想找到为该参数的每个设置测量的最小值(忽略所有其他参数的设置)。这样做的行人方式是:

new_index = []
new_data = []
for param in df.columns:
    if param == 'signal':
        continue
    group = df.groupby(param)['signal'].min()
    for (k,v) in group.items():
        new_index.append((param, k))
        new_data.append(v)
new_index = pd.MultiIndex.from_tuples(new_index,
                                      names=('parameter', 'value'))
df2 = pd.Series(index=new_index, data=new_data)

结果df2为:

parameter  value
knob_1     3        0.495674
           4        0.277030
           5        0.398806
knob_2     1        0.485933
           2        0.277030
dtype: float64

有没有更好的方法来做到这一点,特别是摆脱内循环?

在我看来,df.groupby操作的结果已经包含了我需要的所有内容 - 如果只有某种方式可以从中创建MultiIndex而无需通过元组列表。< / p>

1 个答案:

答案 0 :(得分:3)

使用keys的{​​{1}}参数:

pd.concat()