我有一个包含我的数据的大型数据框,以及另一个具有相同第一维度的数据框,其中包含有关每个时间点的元数据(例如,试验编号是什么,试验类型是什么)。
我想要做的是使用“元数据帧”的值对大数据帧进行切片。我想将它们分开(而不是将数据数据帧存储为较大数据帧的多索引)。
现在,我正在尝试做这样的事情:
def my_func(container):
container.big_df.set_index(container.meta_df[['col1', 'col2']])
container.big_df.loc['col1val', 'col2val'].plot()
但是,这会返回以下错误:
ValueError: Must pass DataFrame with boolean values only
请注意,如果我只将单个列传递给 set_index,则效果很好。
谁能弄清楚这里出了什么问题吗?或者,有人可以告诉我,我正在以一种完全愚蠢和黑客的方式做这件事,并且有更好的方法来解决这个问题吗? :)
我的解决方案
感谢您的想法。我稍微尝试了一下索引,这似乎是最简单/最快的。我不喜欢必须删除其名称的索引,并且转置值等似乎很麻烦。我意识到一些有趣的事情(并且可能值得轻松修复):
dfa.set_index(dfb[['col1', 'col2']])
不起作用,但是
dfa.set_index([dfb.col1, dfb.col2])
does.
因此,您基本上可以按照以下约定将 dfb 转换为列列表,使 set_index 起作用:
dfa.set_index([dfb[col] for col in ['col1', 'col2']])