如何在pythonpandas.DataFrame中只给特定的列(不是所有的列)添加多级列名?
How to add multilevel column name to specific column only(not all the columns) in python pandas.DataFrame?
问题背景参考。我只想将 C
添加到列 B
.
我需要输出为:
df
Out[92]:
A B
C
a 0 0
b 1 1
c 2 2
d 3 3
e 4 4
我试过 this example 作为:
dfnew=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
columns=[('c','b')] #changed from columns=[('c','a'),('c','b')]
dfnew.columns=pd.MultiIndex.from_tuples(columns)
但这行不通。 ValueError: Length mismatch: Expected axis has 2 elements, new values have 1 elements
您可以使用 MultiIndex.from_arrays
:
df.columns = pd.MultiIndex.from_arrays([df.columns, ['','C']])
A B
C
a 0 0
b 1 1
c 2 2
d 3 3
e 4 4
请注意,pd.MultiIndex.from_tuples
需要一个元组列表,顾名思义。如果您检查源代码,您会发现如果不是这种情况,它将通过 zipping
it:
从嵌套列表中创建一个
list(zip(*[df.columns, ['','C']]))
# [('A', ''), ('B', 'C')]
这就是您没有得到预期结果的原因。
如果你想通过指定列的列表来做同样的事情,你可以这样做:
cols = [(i, 'C') if i in ['B','D'] else (i, '') for i in df.columns]
# [('A', ''), ('B', 'C'), ('C', ''), ('D', 'C')]
df.columns = pd.MultiIndex.from_tuples(cols)
A B C D
C C
a 0 0 0 0
b 1 1 1 1
c 2 2 2 2
d 3 3 3 3
e 4 4 4 4
问题背景参考C
添加到列 B
.
我需要输出为:
df
Out[92]:
A B
C
a 0 0
b 1 1
c 2 2
d 3 3
e 4 4
我试过 this example 作为:
dfnew=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
columns=[('c','b')] #changed from columns=[('c','a'),('c','b')]
dfnew.columns=pd.MultiIndex.from_tuples(columns)
但这行不通。 ValueError: Length mismatch: Expected axis has 2 elements, new values have 1 elements
您可以使用 MultiIndex.from_arrays
:
df.columns = pd.MultiIndex.from_arrays([df.columns, ['','C']])
A B
C
a 0 0
b 1 1
c 2 2
d 3 3
e 4 4
请注意,pd.MultiIndex.from_tuples
需要一个元组列表,顾名思义。如果您检查源代码,您会发现如果不是这种情况,它将通过 zipping
it:
list(zip(*[df.columns, ['','C']]))
# [('A', ''), ('B', 'C')]
这就是您没有得到预期结果的原因。
如果你想通过指定列的列表来做同样的事情,你可以这样做:
cols = [(i, 'C') if i in ['B','D'] else (i, '') for i in df.columns]
# [('A', ''), ('B', 'C'), ('C', ''), ('D', 'C')]
df.columns = pd.MultiIndex.from_tuples(cols)
A B C D
C C
a 0 0 0 0
b 1 1 1 1
c 2 2 2 2
d 3 3 3 3
e 4 4 4 4