猿问

基于多索引的一部分选择pandas系列中的条目

我有一个像这样构造的 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系列来做到这一点?


慕标琳琳
浏览 192回答 1
1回答

慕码人2483693

正确的方法是使用多索引,而不是元组索引:import itertoolsimport pandas as pdcombos = 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.50BW  BB    0.00    WW    0.25WW  BB    0.00    BW    0.00dtype: float64它可以像这样过滤:combo_values['BB',]屈服BW    0.25WW    0.50
随时随地看视频慕课网APP

相关分类

Python
我要回答