使用multiindex在dataframe中查找值

时间:2013-10-04 23:20:33

标签: pandas

我在使用多索引查找数据框中的值。 DF [值1,值]。这样可行,但如果值不在索引中,则抛出一个keyerror。我可以处理异常但是有一个与python dict.get()相同的语法吗?也就是说,如果找不到值,我宁愿查找返回None。

标记

2 个答案:

答案 0 :(得分:1)

只需致电DataFrame.get()

In [50]: from pandas.util.testing import makeCustomDataframe as mkdf

In [51]: df = mkdf(5, 2, c_idx_nlevels=2, data_gen_f=lambda *args: rand())

In [52]: df
Out[52]:
C0       C_l0_g0  C_l0_g1
C1       C_l1_g0  C_l1_g1
R0
R_l0_g0    0.155    0.989
R_l0_g1    0.427    0.330
R_l0_g2    0.951    0.720
R_l0_g3    0.745    0.485
R_l0_g4    0.674    0.841

In [53]: level = df.columns[0]

In [54]: level
Out[54]: ('C_l0_g0', 'C_l1_g0')

In [55]: df.get(level)
Out[55]:
R0
R_l0_g0    0.155
R_l0_g1    0.427
R_l0_g2    0.951
R_l0_g3    0.745
R_l0_g4    0.674
Name: (C_l0_g0, C_l1_g0), dtype: float64

In [56]: df.get('how are you?')

In [57]: df.get('how are you?', 'Fine')
Out[57]: 'Fine'

您也可以定义一个函数:

def get_from_index(df, key, default=None):
    try:
        return df.loc[key]
    except KeyError:
        return default

答案 1 :(得分:0)

如果你的df在'key1'和'key2'列中有一个多索引,你想在key1上查找值xxx,在key2上查找yyy,试试这个

df.ix[df.index.get_level_values('key1') == xxx & 
df.index.get_level_values('key2') == yyy]