使用 pandas/pytables 处理与多个索引值关联的关联数据项列表的正确方法

Posted

技术标签:

【中文标题】使用 pandas/pytables 处理与多个索引值关联的关联数据项列表的正确方法【英文标题】:Correct way to deal with a list of associated data items associated with several index values with pandas/pytables 【发布时间】:2014-10-03 02:37:45 【问题描述】:

我想知道处理存储/读取项目列表的正确方法是什么,例如以下处理摇滚明星的示例,其中已知列表包含 hdf5 的最大值数:

Date_of_Birth
Bands[] - where the maximum number of bands is 10
Siblings[] - where the maximum number of siblings is 6
Date_of_Death

所有这些都是列名。

我曾考虑过但结果出错的一种方法 (ValueError: cannot reindex from a duplicate axis) 是列名重复。否则,我能做的就是拥有Bands 1Bands 2 等……但这会使检索和查询变得很麻烦。有没有更好的办法?任何帮助将不胜感激!

【问题讨论】:

使用编号名称时,您可以执行df.filter(like='Bands') 之类的操作来选择所有“Bands”行。 有趣...有没有办法查询所有过滤的?我只知道一种逐项查询的方法。 【参考方案1】:

对于这样的事情,你实际上想要列出带和兄弟的每一列,我会尝试使用多索引

假设您有一个调用 df 的数据框,这些列调用 df.columns 吐出类似Int64Index([dob, band_1, band_2], dtype='int64') 的东西。您可以通过执行此操作将索引重建为可以一次抓取所有波段的内容...

edited 找到了一种方法来执行“部分”MultiIndex

df.columns = pd.MultiIndex.from_tuples([('dob',''),('bands','band_1'),('bands','band_2')])

还有一个构建元组列表的技巧 - 您可以在现有列上添加一堆列表推导......

 [('band',each) for each in df.columns[df.columns>1].apply(lambda x: re.search("band",x)]
 #etc

【讨论】:

以上是关于使用 pandas/pytables 处理与多个索引值关联的关联数据项列表的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据存储中创建复合索引以过滤实体中的多个属性

使用多个 WHERE 子句更新 Codeigniter 中的批处理

数据处理基石:Pandas数据初探索

mysql必知必会--检 索 数 据

我如何使用视图和索引来提高性能

Python 数据处理(二十四)—— 索引和选择