【发布时间】:2014-03-17 18:10:39
【问题描述】:
我有一个包含我的数据的大型数据框,以及另一个相同第一维度的数据框,其中包含有关每个时间点的元数据(例如,它是什么试验编号,它是什么试验类型)。
我想要做的是使用“元数据帧”的值对大数据帧进行切片。我想将它们分开(而不是将元数据帧存储为较大的多索引)。
现在,我正在尝试做这样的事情:
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])
会。
因此,您基本上可以通过以下约定将 dfb 转换为列列表,从而使 set_index 起作用:
dfa.set_index([dfb[col] for col in ['col1', 'col2']])
【问题讨论】:
标签: python numpy pandas scipy scikit-learn