Pandas 多索引列名称

Pandas Multi Index column names

如何创建一个包含多个索引列的简单数据框?

import pandas as pd

quality = ['strong', 'weak']
types = ['major', 'minor', 'unknown']


import itertools
a = [quality, types]
all_columns = list(itertools.product(*a))

list_ids = ['a1','b2','c3']
df = pd.DataFrame(list_ids, columns = ['ids'])

for col in all_columns:
    df[col] = np.nan

现在我尝试应用 MultiIndex,但它没有任何改变:

df.columns = pd.MultiIndex.from_frame(pd.DataFrame(df.columns))
display(df['strong','major'])

KeyError: 'Key length (2) exceeds index depth (1)'

请尝试 concat + MultiIndex.from_product

result_df = pd.concat(
    (df, pd.DataFrame(columns=pd.MultiIndex.from_product([quality, types]))),
    axis=1
)

result_df:

  ids (strong, major) (strong, minor) (strong, unknown) (weak, major) (weak, minor) (weak, unknown)
0  a1             NaN             NaN               NaN           NaN           NaN             NaN
1  b2             NaN             NaN               NaN           NaN           NaN             NaN
2  c3             NaN             NaN               NaN           NaN           NaN             NaN

result_df['strong', 'major']:

0    NaN
1    NaN
2    NaN
Name: (strong, major), dtype: object

import pandas as pd

list_ids = ['a1', 'b2', 'c3']
df = pd.DataFrame(list_ids, columns=['ids'])

quality = ['strong', 'weak']
types = ['major', 'minor', 'unknown']

result_df = pd.concat(
    (df, pd.DataFrame(columns=pd.MultiIndex.from_product([quality, types]))),
    axis=1
)