根据多索引的一部分选择熊猫系列中的条目

时间:2019-03-19 00:05:22

标签: python python-3.x pandas

我有一个这样构造的熊猫系列

import itertools
import pandas as pd

combos = list(itertools.permutations(['BB', 'BW', 'WW'], 2))

combo_values = pd.Series([2,4,0,2,0,0], combos)

所以combo_values看起来像这样

(BB, BW)    2
(BB, WW)    4
(BW, BB)    0
(BW, WW)    2
(WW, BB)    0
(WW, BW)    0
dtype: int64

我知道您可以像这样提取一个条目

combo_values['BB', 'BW']

所以我当时想提取前两个条目,我想这样做:

combo_values['BB',]

#or this

combo_values['BB',:]

均不起作用,第一个选项会产生以下错误(我正在清除跟踪)

TypeError: 'tuple' object cannot be interpreted as an integer

KeyError: ('BB',)

我知道这种替代解决方案有效:

combo_df = pd.DataFrame(combos, columns = ['A', 'B'])
combo_df['combo_values'] = [2,4,0,2,0,0]
combo_df.loc[combo_df['A'] == 'BB', :]

但是我的combo_values系列有没有办法做到这一点?

谢谢

1 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是使用多索引,而不是元组索引:

import itertools
import pandas as pd

combos = list(itertools.permutations(['BB', 'BW', 'WW'], 2))

multi = pd.MultiIndex.from_tuples(combos)

combo_values = pd.Series([2,4,0,2,0,0], multi)

combo_values现在看起来像这样:

BB  BW    0.25
    WW    0.50
BW  BB    0.00
    WW    0.25
WW  BB    0.00
    BW    0.00
dtype: float64

它可以像这样过滤:

combo_values['BB',]

屈服

BW    0.25
WW    0.50