pandas 数据框中是否可以有一些多索引列和一些单索引列?

问题描述 投票:0回答:1

在 pandas 中,我想要一个数据框,其中某些列具有多索引,有些则没有。

在视觉上我想要这样的东西:

  |   c    |    |
  |--------|  d |
  | a  | b |    |
================|
  | 1  | 4 |  0 |
  | 2  | 5 |  1 |
  | 3  | 6 |  2 |

在 pandas 中我可以做这样的事情:

df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6], 'd':[0,1,2]})
columns=[('c','a'),('c','b'), 'd']
df.columns=pd.MultiIndex.from_tuples(columns)

输出将是:

   c      d
   a  b NaN
0  1  4   0
1  2  5   1
2  3  6   2

但是,当通过

d
访问
df['d']
列时,我得到的输出是 Pandas Dataframe,而不是 Pandas 系列。问题显然是 pandas 对每一列应用了多列索引。所以我的问题是:有没有办法仅将列多重索引应用于某些列,而让其他列保持原样?

换句话说,我希望

df['d']
的结果是普通数据框中的 Series,
df['c']
的结果是列多索引中的 pd.DataFrame 以及
df['c']['a']
Pandas Series 的结果。这可能吗?

python pandas dataframe multi-index
1个回答
0
投票

你应该像这样定义一个单例

(d,)
:

import pandas as pd
df = pd.DataFrame({'a':[1,2,3],'b':[4,5,6], 'd':[0,1,2]})
columns=[('c','a'),('c','b'), ('d',)]
df.columns=pd.MultiIndex.from_tuples(columns)

print(df)
   c      d
   a  b NaN
0  1  4   0
1  2  5   1
2  3  6   2
由于标题的原因,

df['d']
被视为数据帧而不是序列。通常,系列具有索引+值。

就像数据框是一个 2 级多索引列一样,您只需调用

NaN
即可获得子级别
df['d']

如果你想调用该系列,你必须调用

df[('d', np.nan)]
,这样你就不再有标题了。

>>> type(df['d'])
<class 'pandas.core.frame.DataFrame'>

>>> type(df[('d', np.nan)])
<class 'pandas.core.series.Series'>
© www.soinside.com 2019 - 2024. All rights reserved.