这个问题扩展了我以前的一个问题:复制Pandas数据帧的多索引列,包括第二个标题
编辑-澄清我的问题之一是处理N=1
(生成Index
数据帧(和N>1
(生成MultiIndex
数据帧…(时的差异
背景-我有一个从CSV中读取的带有N
标头的数据集。N
可以是大于或等于1的任何值…
例如N=1
:
df = pd.read_csv(file, header=[0:N])
print(df)
A B C
--------------- (Single-)Index dataframe
0 1 2 3
1 4 5 6
2 7 8 9
...
例如N=3
:
df = pd.read_csv(file, header=[0:N])
print(df)
A B C
a b c
ɑ β 𝛾
--------------- MultiIndex dataframe
0 1 2 3
1 4 5 6
2 7 8 9
...
我想要什么-我想将其中一列(例如,A(复制到一个新列d中,这样它的子标题就可以按任意(N
(数量的索引标题原样复制。。。
A B C D
...N header rows...
a b c a
ɑ β 𝛾 ɑ
----------------------
0 1 2 3 1
1 4 5 6 4
2 7 8 9 7
...
当前解决方案-。。。根据我最初问题的答案,我可以使用固定数量的标题行N
。。。
例如N=2
:
df[('D',df['A'].columns[0])] = df['A']
但这对普通的单索引数据帧不起作用,因为df['A']
没有.columns
属性。。。
需要扩展-。。。我不确定处理N
行的最Python的方法可能是什么……目前我已经为N=1
和N=2
做了一个if
的例子,但这感觉很笨拙。。。
我想知道是否有一种方法可以强制单个Index
数据帧成为具有单个索引行的MultiIndex
数据帧?
您可以尝试
df[('D',) + df['A'].columns[0]] = df['A']
print(df)
A B C D
a b c a
ɑ β 𝛾 ɑ
0 1 2 3 1
1 4 5 6 4
2 7 8 9 7
如果A
下有多个二级列
df[[('D',) + col for col in df['A'].columns]] = df['A']
print(df)
A B C D
a b b c a b
ɑ β β 𝛾 ɑ β
0 1 0 2 3 1 0
1 4 0 5 6 4 0
2 7 0 8 9 7 0