熊猫:多索引子集选择



以下代码将生成一个表示四个玩家的数据帧,每个玩家多次掷出两个骰子:

mux = pd.MultiIndex.from_arrays([
list(['Alice', 'Alice', 'Alice', 
'Bob', 'Bob', 'Bob', 'Bob', 'Bob', 
'Carol', 'Carol', 'Carol', 'Carol', 'Carol', 'Carol', 
'Dan', 'Dan']),
list('1231234512345612')
], names=['player', 'roll'])
#df = pd.DataFrame({'die1': np.random.randint(1, 7, len(mux)),
#                   'die2': np.random.randint(1, 7, len(mux))}, mux)
df = pd.DataFrame({'die1': ['3','6','2','1','1','6','5','1','3','1','4','5','3','5','5','5'],
'die2': ['2','5','1','4','1','6','3','5','6','4','5','1','4','4','3','6']}, mux)

这是生成的数据帧:

die1 die2
player roll          
Alice  1       3    2
2       6    5
3       2    1
Bob    1       1    4
2       1    1
3       6    6
4       5    3
5       1    5
Carol  1       3    6
2       1    4
3       4    5
4       5    1
5       3    4
6       5    4
Dan    1       5    3
2       5    6

我对球员感兴趣 - 不仅仅是个人掷骰子,还有球员 - 他们在第一个骰子上掷出6

。下面的代码做了我不想要的事情,它返回第一个骰子是 6 的单个卷:df[df.die1=='6']

die1   die2
player  roll        
Alice   2    6      5
Bob     3    6      6

我如何使用die1产生以下内容,而不提及单个玩家的名字,我显然不会先验地知道?

die1 die2
player roll          
Alice  1       3    2
2       6    5
3       2    1
Bob    1       1    4
2       1    1
3       6    6
4       5    3
5       1    5

你可以做groupby

# is your data string '6' or integer 6
df[df['die1'].eq('6').groupby('player').transform('any')]

输出:

die1 die2
player roll          
Alice  1       3    2
2       6    5
3       2    1
Bob    1       1    4
2       1    1
3       6    6
4       5    3
5       1    5
ll=[]
for i, j in df.groupby('player'):
if len(j[j.die1==6])>0:
ll.append(j)
return pd.concat(ll)

最新更新