<p>要将日志应用于完整的foo索引级别,可以使用<code>loc</code>一次选择所有行,并使用<code>np.log</code>执行示例操作</p>
<pre><code>#example data
np.random.seed(10)
df = pd.DataFrame(np.random.randint(1,50,30).reshape(6,-1),
index=pd.MultiIndex.from_product([['foo','bar'], list("ABC")],
names=['field', 'idx']))
print(np.log(df.loc['foo']))
0 1 2 3 4
idx
A 2.302585 3.610918 2.772589 0.000000 3.367296
B 3.258097 3.401197 3.891820 3.401197 2.197225
C 2.302585 0.000000 3.761200 3.713572 3.610918
</code></pre>
<p>如您所见,level字段不在结果中,您需要使用<code>pd.concat</code>和字典以及要创建的级别名称重新创建此级别。然后再次使用<code>pd.concat</code>将其添加到df的末尾</p>
<pre><code>df = pd.concat([df,
pd.concat({'logfoo': np.log(df.loc['foo'])},
names=['field'])
])
print(df)
0 1 2 3 4
field idx
foo A 10.000000 37.000000 16.000000 1.000000 29.000000
B 26.000000 30.000000 49.000000 30.000000 9.000000
C 10.000000 1.000000 43.000000 41.000000 37.000000
bar A 17.000000 37.000000 48.000000 12.000000 25.000000
B 44.000000 34.000000 9.000000 37.000000 15.000000
C 14.000000 6.000000 14.000000 26.000000 14.000000
logfoo A 2.302585 3.610918 2.772589 0.000000 3.367296
B 3.258097 3.401197 3.891820 3.401197 2.197225
C 2.302585 0.000000 3.761200 3.713572 3.610918
</code></pre>