擅长:python、mysql、java
<p>您需要创建新的<code>MultiIndex</code>并重新分配:</p>
<pre><code>a = df.columns.get_level_values(0).astype(str)
b = df.columns.get_level_values(1)
df.columns = pd.MultiIndex.from_arrays([a,b], names=df.columns.names)
print (df.columns)
MultiIndex(levels=[['1', 'string_name'], ['cat', 'value1', 'value2']],
labels=[[0, 0, 1], [0, 1, 2]],
names=[None, 'cat'])
</code></pre>
<p>如果希望只筛选多索引第一级中的字符串值,则可以创建布尔掩码,并通过<a href="http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing" rel="nofollow noreferrer">^{<cd2>}</a>和<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html" rel="nofollow noreferrer">^{<cd3>}</a>进行筛选:</p>
<pre><code>mask = df.columns.get_level_values(0).map(lambda x: isinstance(x, str))
df1 = df.loc[:, mask]
print (df1)
string_name
value2
A 0.976956
B 0.638192
C 0.001334
D 0.400408
E 0.374419
</code></pre>