从pandas数据帧中删除并索引和关联数据

时间:2015-04-08 02:30:54

标签: python python-2.7 pandas

我有一个如下所示的数据框:

df = pd.DataFrame({'a': {('0hr', '0.01um', 0): 12,
  ('0hr', '0.01um', 1): 10,
  ('0hr', '0.1um', 0): 8,
  ('0hr', '0.1um', 1): 6,
  ('0hr', 'Control', 0): 4,
  ('0hr', 'Control', 1): 2,
  ('24hr', '0.01um', 0): 18,
  ('24hr', '0.01um', 1): 15,
  ('24hr', '0.1um', 0): 12,
  ('24hr', '0.1um', 1): 9,
  ('24hr', 'Control', 0): 6,
  ('24hr', 'Control', 1): 3},
 'b': {('0hr', '0.01um', 0): 42,
  ('0hr', '0.01um', 1): 35,
  ('0hr', '0.1um', 0): 28,
  ('0hr', '0.1um', 1): 21,
  ('0hr', 'Control', 0): 14,
  ('0hr', 'Control', 1): 7,
  ('24hr', '0.01um', 0): 30,
  ('24hr', '0.01um', 1): 25,
  ('24hr', '0.1um', 0): 20,
  ('24hr', '0.1um', 1): 15,
  ('24hr', 'Control', 0): 10,
  ('24hr', 'Control', 1): 5}})

我想创建一个具有相同索引和列但在索引轴上少一个级别的数据框。

我知道我可以这样做:

df2 = pd.DataFrame(index=df.index columns=df.columns)

然后重置索引以降低第二级:

df2.reset_index(level=2,drop=True,inplace=True)

但是产生了:

                a    b
0hr  0.01um   NaN  NaN
     0.01um   NaN  NaN
     0.1um    NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN
     Control  NaN  NaN
24hr 0.01um   NaN  NaN
     0.01um   NaN  NaN
     0.1um    NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN
     Control  NaN  NaN

如何让重复的数据框看起来像这样:

                a    b
0hr  0.01um   NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN
24hr 0.01um   NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN

1 个答案:

答案 0 :(得分:1)

您可以使用drop_duplicates方法:

In [11]: df.index.droplevel(2)
Out[11]:
MultiIndex(levels=[[u'0hr', u'24hr'], [u'0.01um', u'0.1um', u'Control']],
           labels=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2]])

In [12]: df.index.droplevel(2).drop_duplicates()
Out[12]:
MultiIndex(levels=[[u'0hr', u'24hr'], [u'0.01um', u'0.1um', u'Control']],
           labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]])

您可以将其输入您的DataFrame:

In [13]: pd.DataFrame(index=df.index.droplevel(2).drop_duplicates(), columns=df.columns)
Out[13]:
                a    b
0hr  0.01um   NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN
24hr 0.01um   NaN  NaN
     0.1um    NaN  NaN
     Control  NaN  NaN