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]]
>>>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;