【问题标题】:Pandas: Assign MultiIndex Column from DataFramePandas:从 DataFrame 分配 MultiIndex 列
【发布时间】:2019-02-08 10:45:01
【问题描述】:

我有一个带有 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'

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

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    我认为需要没有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
    

    【讨论】:

    • 谢谢你的回答,实际上我有一个非常大的数据框,列上有一个多索引,我想避免不断地堆叠和取消堆叠,因为它只是一个分配的计算量很大.我原来帖子中的 unstack 只是为了在示例中定义数据框(我可能应该改变它)
    • @CameronOliver - 如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记,将其从灰色切换为已填充。谢谢。
    猜你喜欢
    • 2016-11-06
    • 2013-03-22
    • 2018-11-02
    • 2019-05-20
    • 2017-08-25
    • 1970-01-01
    • 2013-05-25
    • 2020-06-15
    • 2019-08-02
    相关资源
    最近更新 更多