Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一行中打印多级索引pd.DataFrame的每个级别中的所有行_Python_Pandas_Aggregate - Fatal编程技术网

Python 在一行中打印多级索引pd.DataFrame的每个级别中的所有行

Python 在一行中打印多级索引pd.DataFrame的每个级别中的所有行,python,pandas,aggregate,Python,Pandas,Aggregate,我有一个数据帧,在执行了groupby()和之后,它被转换为多索引数据帧 对于团队中的每个球员,找出总旅行次数和总旅行时间。这将返回一个多索引数据帧 player_total = df.groupby(by = ['team', 'player']).agg({'time' : 'sum', 'trips' : 'count'}) player_total Out[4]: trips time team player Team1 Pla

我有一个数据帧,在执行了
groupby()
和之后,它被转换为多索引数据帧

对于团队中的每个球员,找出总旅行次数和总旅行时间。这将返回一个多索引数据帧

player_total = df.groupby(by = ['team', 'player']).agg({'time' : 'sum', 'trips' : 'count'})

player_total
Out[4]:
                 trips  time
team    player      
Team1   Player1     2   19526
Team2   Player293   1   17656
        Player333   1   18373
Team3   Player20    1   1883
        Player22    1   17338899
所需输出: 我想打印输出,这样团队中的所有球员都在同一条线上

Team1   Player1 : 2 trips : 19526;
Team2   Player293 : 1 : 17656; Player333 : 1 : 18373;
Team3   Player22 : 1 trip : 17338899; Player20 : 1 trip : 1883
这被认为过于宽泛,因此我冒昧地将pandas数据帧创建/聚合从输出打印中分离出来

  • 使用
    groupby()
    迭代第0级(团队)

    例如,在第二次迭代中,它将为
    Team2
    返回一个数据帧:

                    trips   time
    team  player              
    Team2 Player293     1  17656
          Player333     1  18373
    
  • 使用
    reset_index()
    删除团队索引列,并将球员索引列作为数据框的一部分

    >>>team_df = df2.reset_index(level = 0, drop = True).reset_index()
    >>>team_df
          player  trips   time
    0  Player293     1  17656
    1  Player333     1  18373
    
  • 将该数据帧转换为列表列表,以便我们可以遍历每个播放器

    team_df.values.tolist()
    >>>[['Player293', 1, 17656], ['Player333', 1, 18373]]
    
  • 打印时,我们必须将整数映射到字符串,并使用print函数的end参数打印分号,而不是在末尾打印新行

    >>>for player in team_df.values.tolist():
           print(': '.join(map(str, player)), end = '; ')
    >>>Player293: 1: 17656; Player333: 1: 18373; 
    
  • 完整解决方案:

    from __future__ import print_function
    
    #iterate through each team
    for team, df2 in player_total.groupby(level = 0):
        print(team, end = '\t')
        #drop the 0th level (team) and move the first level (player) as the index
        team_df = df2.reset_index(level = 0, drop = True).reset_index()
        #iterate through each player on the team and print player, trip, and time
        for player in team_df.values.tolist():
            print(': '.join(map(str, player)), end = '; ')
        #After printing all players insert a new line
        print()
    
    Player1: 2: 19526; 
    Player293: 1: 17656; Player333: 1: 18373; 
    Player20: 1: 1883; Player22: 1: 17338899; 
    
    输出:

    from __future__ import print_function
    
    #iterate through each team
    for team, df2 in player_total.groupby(level = 0):
        print(team, end = '\t')
        #drop the 0th level (team) and move the first level (player) as the index
        team_df = df2.reset_index(level = 0, drop = True).reset_index()
        #iterate through each player on the team and print player, trip, and time
        for player in team_df.values.tolist():
            print(': '.join(map(str, player)), end = '; ')
        #After printing all players insert a new line
        print()
    
    Player1: 2: 19526; 
    Player293: 1: 17656; Player333: 1: 18373; 
    Player20: 1: 1883; Player22: 1: 17338899;