微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用ix索引到pandas multindex

我已经设置了这样的代码

import pandas as pd
import numpy as np
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'],
          ['aaa', 'bbb', 'ccc', 'ccc', 'ddd', 'eee', 'eee', 'eee' ]]
tuples = zip(*arrays)
index = pd.MultiIndex.from_tuples(tuples, names=['A', 'B', 'C'])
df = pd.DataFrame(np.random.randn(8, 4), index=index)

df
Out[161]: 
                    0         1         2         3
A   B   C                                          
bar one aaa  0.682220 -0.598889 -0.600635 -0.488069
    two bbb -0.134557  1.614224 -0.191303  0.073813
baz one ccc -1.006877 -0.137264 -0.319274  1.465952
    two ccc  0.107222  0.358468  0.165108 -0.258715
foo one ddd  0.360562  1.759095 -1.385394 -0.646850
    two eee -1.113520  0.221483  2.226704 -0.994636
qux one eee -0.609271 -0.888330  0.824189  1.772536
    two eee -0.008346 -0.688091  0.263303  1.242485

我想找到基于标准组合与A,B和C组匹配的行.

例如在sql术语中:select *其中A in(‘foo’,’qux’)和C =’eee’

我可以用ix实现这一点吗?例如就像是:

df.ix(['foo', 'qux'],:,'eee')

对于非常大的数据集,实现此目的的唯一方法是什么?

(我目前正在使用pandas 0.7,但如果绝对必要可以升级)

解决方法:

我将编写一个函数来执行此类操作:

import numpy as np
def ms(df, *args):
    idx = df.index
    for i, values in enumerate(args):
        if values is not None:
            if np.isscalar(values):
                values = [values]
            idx = idx.reindex(values, level=i)[0]
    return df.ix[idx]

然后你可以很容易地做到:

ms(df, ['foo', 'qux'], None, "eee")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐