我有一个复杂的MultiIndex:
import pandas as pd
metrics = ['PT', 'TF', 'AF']
n_replicates = 3
n_nodes = 6
cols = [(r,m,n) for r in range(n_replicates) for m in metrics for n in range(n_nodes)]
cols = pd.MultiIndex.from_tuples(cols,names = ['Replicates', 'Metrics', 'Nodes'])
ind = range(5)
df = pd.DataFrame(columns=cols, index=ind)
df.sortlevel(level=0, axis=1, inplace=True)
它给了我一些问题。其中之一是:我想添加一个没有MultiIndex所有级别的列:
df[r, 'Graph'] = ....
但是,我最终还是需要制作:
df[r, 'Graph', 0] = ....
当我引用该列时,我还需要使用df[r, 'Graph', 0]
,这是笨重的,因为在第三级实际上没有发生任何事情。有办法解决这个问题吗?
编辑:更多示例
添加列: df [0,'Graph'] = arange(5) ValueError:无效条目
df.ix[:,[0,'Graph']] = arange(5)
KeyError: "['Graph'] not in index"
df.xs[0,'Graph'] = arange(5)
TypeError: 'instancemethod' object does not support item assignment
df[0, 'Graph', 0] = arange(5) #Works! But I have to reference a lower level that doesn't mean anything for this 'Graph' column.
从专栏中读到: df.ix [:,[0,'Graph']]#给出整个df [0],而不仅仅是[0,'Graph']列
df[0, 'Graph']
KeyError: 'MultiIndex lexsort depth 0, key was length 2'
df.sortlevel(level=0, axis=1, inplace=True)
df[0, 'Graph'] #Works! Though if one is making many manipulations to the dataframe then this sortlevel needs to be called a lot.
Jeff的第二条评论进一步编辑: 我很欣赏给定的列需要具有多索引的所有级别。虽然我想将数据保存在一个单元中,以便存储在HDF5中,但我想到了另一个框架。答案就是面板。但是,我最终会在这个级别之上有几个级别,如果可能的话,我对面板的面板很谨慎。我绝对愿意接受我没有想过的其他攻击角度,以避免所有这些问题。