在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 series.问题显然是pandas对每一列都应用了多列索引.所以我的问题是:有没有一种方法可以只对某些列应用列多索引,而对其他列保持原样?

换句话说,我希望df['d']的结果将是一个序列,就像在普通数据帧中一样,df['c']是一个pd.DataFrame的结果,就像在列MULTINDEX中一样,而df['c']['a']是Pandas 系列的结果.这个是可能的吗?

推荐答案

您可以使用空字符串""作为占位符:

columns = [
    ("c", "a"),
    ("c", "b"),
    ("d", ""),  # << here 
]

发帖主题:Re:Kolibrios

type(df["d"])      # pandas.core.series.Series
type(df["c"])      # pandas.core.frame.DataFrame
type(df["c"]["a"]) # pandas.core.series.Series

Python相关问答推荐

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

log 1 p numpy的意外行为

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何从数据库上传数据到html?

joblib:无法从父目录的另一个子文件夹加载转储模型

调用decorator返回原始函数的输出

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

在极中解析带有数字和SI前缀的字符串

Geopandas未返回正确的缓冲区(单位:米)

pandas:对多级列框架的列进行排序/重新排序

在Python中使用yaml渲染(多行字符串)

为什么'if x is None:pass'比'x is None'单独使用更快?

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

Python Mercury离线安装

jsonschema日期格式

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

如何使用matplotlib查看并列直方图

如何在Airflow执行日期中保留日期并将时间转换为00:00

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

使用xlsxWriter在EXCEL中为数据帧的各行上色