Pandas Multiindex,其中一列没有多个级别

时间:2013-10-23 17:17:47

标签: python pandas

我有一个复杂的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中,但我想到了另一个框架。答案就是面板。但是,我最终会在这个级别之上有几个级别,如果可能的话,我对面板的面板很谨慎。我绝对愿意接受我没有想过的其他攻击角度,以避免所有这些问题。

0 个答案:

没有答案