聚合数据并获取总和和计数

2024-04-27 10:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一个对象有很多行:

输入:

    Team1     Player1     idTrip13     133
    Team2     Player333   idTrip10     18373
    Team3     Player22    idTrip12     17338899
    Team2     Player293   idTrip02     17656
    Team3     Player20    idTrip11     1883
    Team1     Player1     idTrip19     19393

我需要聚合这些数据(就像一个透视表)。

我正在处理的输出:

Team1   Player1 : 2 trips : sum(133+19393)
Team2   Player333 : 1 trip : 18373; Player293 : 1 trip : 17656
Team3   Player22 : 1 trip : 17338899; Player20 : 1 trip : 1883

有人能建议Python中的适当对象使用这样我就可以得到以下输出吗?

print team, player, trips, time

Tags: 对象triptripsplayer1team1team2team3player333
1条回答
网友
1楼 · 发布于 2024-04-27 10:42:31

pandas DataFrames使用groupby函数

  1. 将您的数据放入一个列表列表中,每个内部列表将成为数据帧中的一行。

    In[1]:
    
    mydata = [['Team1', 'Player1', 'idTrip13', 133], ['Team2', 'Player333', 'idTrip10', 18373],
    ['Team3', 'Player22', 'idTrip12', 17338899], ['Team2', 'Player293','idTrip02', 17656], 
    ['Team3', 'Player20', 'idTrip11', 1883], ['Team1', 'Player1', 'idTrip19', 19393]]
    
    df = pd.DataFrame(mydata, columns = ['team', 'player', 'trips', 'time'])
    
    df
    Out[1]:
         team    player       trips      time
    0   Team1   Player1     idTrip13    133
    1   Team2   Player333   idTrip10    18373
    2   Team3   Player22    idTrip12    17338899
    3   Team2   Player293   idTrip02    17656
    4   Team3   Player20    idTrip11    1883
    5   Team1   Player1     idTrip19    19393
    
  2. Call ^{},传递要用作grouper的列, 并对组应用函数。


实例

例如1查找每个团队的旅行次数。team是grouper,我们在列['trips']上应用函数count()

In[2]:
trip_count = df.groupby(by = ['team'])['trips'].count() 

trip_count              
Out[2]:          

 team
Team1    2
Team2    2
Team3    2
Name: trips, dtype: int64

例2(多列):查找团队中每个玩家旅行的总时间。我们使用2列['team', 'player']作为grouper,并在列['time']上应用函数sum()

In[3]:              
trip_time = df.groupby(by = ['team', 'player'])['time'].sum() 

trip_time        
Out[3]:

 team   player   
Team1  Player1         19526
Team2  Player293       17656
       Player333       18373
Team3  Player20         1883
       Player22     17338899
Name: time, dtype: int64

例如3(multiple functions)对于一个团队中的每个玩家,找出旅行的总次数和总旅行时间。

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

相关问题 更多 >