Skip to main content
 首页 » 编程设计

python之pandas之仅更新基于 'key' 值的特定 DataFrame 列值

2025年05月04日13qq78292959

我有以下两个数据框,

统计:

player_id   player_name   gp    ab   run   hit 
    28920      S. Smith    1     2     1     3 
    33351    T. Mancini    0     0     0     0 
    30267     C. Gentry    0     0     0     0 
    34885        H. Kim    1     0     0     0 
    31988     J. Schoop    0     0     0     0 
     5908    J.J. Hardy    1     3     0     0 

& 游戏:

player_id   player_name   gp    ab   run    hit 
    28920      S. Smith    1     4     1      1 
    33351    T. Mancini    1     1     0      1 
    34885        H. Kim    1     1     2      0 
    5908     J.J. Hardy    1     4     0      0 

我只想根据 player_id 更新在上一场比赛中活跃的玩家的统计数据,因此最终的统计数据 DataFrame 如下所示:

player_id   player_name   gp    ab   run   hit 
    28920      S. Smith    2     6     2     4 
    33351    T. Mancini    1     1     0     1 
    30267     C. Gentry    0     0     0     0 
    34885        H. Kim    2     1     2     0 
    31988     J. Schoop    0     0     0     0 
     5908    J.J. Hardy    2     7     0     0 

感谢您的宝贵时间和帮助!

请您参考如下方法:

你可以用 set_index 和 update

stats=stats.set_index(['player_id','player_name']) 
game=game.set_index(['player_id','player_name']) 
stats.update(game) 
stats = stats.astype(int).reset_index() 
stats 
Out[452]:  
   player_id player_name  gp  ab  run  hit 
0      28920     S.Smith   1   4    1    1 
1      33351   T.Mancini   1   1    0    1 
2      30267    C.Gentry   0   0    0    0 
3      34885       H.Kim   1   1    2    0 
4      31988    J.Schoop   0   0    0    0 
5       5908   J.J.Hardy   1   4    0    0 

由于您使用 add

更新了您的问题
#stats=stats.set_index(['player_id','player_name']) 
#game=game.set_index(['player_id','player_name']) 
stats.add(game,fill_value=0).astype(int).reset_index() 
Out[460]:  
   player_id player_name  gp  ab  run  hit 
0       5908   J.J.Hardy   2   7    0    0 
1      28920     S.Smith   2   6    2    4 
2      30267    C.Gentry   0   0    0    0 
3      31988    J.Schoop   0   0    0    0 
4      33351   T.Mancini   1   1    0    1 
5      34885       H.Kim   2   1    2    0