假设我有一组通过改变两个参数knob_b
和knob_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>
答案 0 :(得分:3)
使用keys
的{{1}}参数:
pd.concat()