Pandas:从 DataFrame 分配 MultiIndex 列
Posted
技术标签:
【中文标题】Pandas:从 DataFrame 分配 MultiIndex 列【英文标题】:Pandas: Assign MultiIndex Column from DataFrame 【发布时间】: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'
任何帮助将不胜感激,谢谢。
【问题讨论】:
【参考方案1】:我认为需要没有unstack
和stack
的解决方案 - 按boolean indexing
、rename
值过滤以避免重复和最后使用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 它 - 单击答案旁边的复选标记,将其从灰色切换为已填充。谢谢。以上是关于Pandas:从 DataFrame 分配 MultiIndex 列的主要内容,如果未能解决你的问题,请参考以下文章
使用字符串和浮点数字典的 Pandas DataFrame 分配错误?
Python Pandas:将 DataFrame 组的最后一个值分配给该组的所有条目
尝试将 ID 分配给 pandas DataFrame 中的对,得到不一致的结果