python - Pandas:多索引子集选择

标签 python pandas multi-index

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

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

关于python - Pandas:多索引子集选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61883022/

相关文章:

python - 如何从合并表创建 MultiIndex Dataframe?

python - 多索引分类并在 PySpark 中对其进行编码

python - 如何最好地在函数中初始化Python的随机模块

python - 如何获得 QTableView 标题中单击的右键单击上下文菜单?

python - 计算 360 度圆内的移动平均线

python - 如何以特定方式旋转数据框

python - 如何从 Google App Engine 应用程序解析 XML?

python - 如何在Python的多个sheet中执行多个命令

python - 使用 groupby 时 Pandas 中的计算模式

python - 使用索引值列表对 pandas 多索引数据帧进行切片