首页 > 解决方案 > Pandas:从 DataFrame 分配 MultiIndex 列

问题描述

我有一个带有 multiIndex 列的 DataFrame。假设它是这样的:

index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
                                   ('two', 'a'), ('two', 'b')])
df = pd.DataFrame({'col': np.arange(1.0, 5.0)}, index=index)

df = df.unstack(1)

(我知道这个定义可能更直接)。我现在想基于 DataFrame 设置一个新的 0 级列。例如

df['col2'] = df['col'].applymap(lambda x: int(x < 3))

这不起作用。到目前为止,我发现的唯一方法是分别添加每一列: Pandas: add a column to a multiindex column dataframe ,或某种复杂的连接过程。

期望的结果是一个新的 0 级列'col2',其中包含两个 1 级子列:'a''b'

任何帮助将不胜感激,谢谢。

标签: pythonpandasmulti-index

解决方案


我相信需要没有unstackstack过滤的解决方案boolean indexingrename避免重复和最后使用的值DataFrame.append

df2 = df[df['col'] < 3].rename({'one':'one1', 'two':'two1'}, level=0)
print (df2)
        col
one1 a  1.0
     b  2.0

df = df.append(df2)
print (df)
        col
one  a  1.0
     b  2.0
two  a  3.0
     b  4.0
one1 a  1.0
     b  2.0

推荐阅读