使用 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 1
、Bands 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 处理与多个索引值关联的关联数据项列表的正确方法的主要内容,如果未能解决你的问题,请参考以下文章