复制Pandas数据帧的N-Index列,包括所有子标题



这个问题扩展了我以前的一个问题:复制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=1N=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

最新更新