我有一个带有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'
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
我认为没有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