围绕给定级别拆分多指数指数

时间:2014-04-09 20:12:15

标签: python pandas

假设我有一个类似以下的MultiIndex DataFrame:

                   X         Y 
A    B                           
bar  one    0.717822 -0.421127 
     three -0.763407 -0.306909 
flux six   -1.504799  0.977983 
     three -0.202268  1.971939 
foo  five   1.715336 -0.157881 
     one    0.942614 -1.529973 
     two   -1.918896 -0.989882 
     two    0.434202  1.438424 

我想创建一个新列new,以便A的每个值的 B条目的一半,列newH,而另一半为newL

我正在寻找一个答案,使无假设关于索引中各级别的位置(即解决方案应按名称引用级别)。

在上面的示例中,一个可能的分配如下所示:

                   X         Y  new
A    B                           
bar  one    0.717822 -0.421127   H
     three -0.763407 -0.306909   L
flux six   -1.504799  0.977983   H
     three -0.202268  1.971939   L
foo  five   1.715336 -0.157881   H
     one    0.942614 -1.529973   H
     two   -1.918896 -0.989882   L
     two    0.434202  1.438424   L

我怎么能在熊猫中做到这一点?

1 个答案:

答案 0 :(得分:2)

我首先创建了一个系列,其中每个组中的相对累积计数(在A级上分组),然后将“H”/“L”分配给低于/高于0.5的值:

In [118]: s = df.groupby(level='A').cumcount() / df.groupby(level='A').size()

In [119]: df['new'] = 'H'

In [120]: df.loc[s>=0.5, 'new'] = 'L'

更新:该分区似乎不适用于pandas 0.13.1(但与master / 0.14一起使用)。相反,您可以使用div方法并明确指定级别:

s = df.groupby(level='A').cumcount().div(df.groupby(level='A').size(), level='A')