Python pandas-仅基于';键';价值

Python pandas-仅基于';键';价值,python,pandas,dataframe,merge,updates,Python,Pandas,Dataframe,Merge,Updates,我有以下两个数据帧 stats: 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

我有以下两个数据帧

stats

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
更新上一场比赛中活跃玩家的统计数据,以便最终统计数据框如下所示:

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\u 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

您可以使用
set\u 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

什么,什么,2017年的金莺!不管怎样,在给出的数据中还不清楚如何判断谁参加了最近的比赛。你的意思是玩家id告诉你谁参加了最近的比赛,但我不知道怎么做。每个游戏都有数据帧吗?你能详细说明一下吗?统计数据显示了当前球队的统计数据,并且比赛是一个特定的比赛,因此比赛['gp']=1。因此,在游戏添加到统计数据后,新闻统计数据将更新统计数据['gp']1。这将给我目前的统计数字后,他们是由1场比赛。我希望这是有意义的。什么,什么,2017年的金莺!不管怎样,在给出的数据中还不清楚如何判断谁参加了最近的比赛。你的意思是玩家id告诉你谁参加了最近的比赛,但我不知道怎么做。每个游戏都有数据帧吗?你能详细说明一下吗?统计数据显示了当前球队的统计数据,并且比赛是一个特定的比赛,因此比赛['gp']=1。因此,在游戏添加到统计数据后,新闻统计数据将更新统计数据['gp']1。这将给我目前的统计数字后,他们是由1场比赛。我希望这是有意义的。但这不是完全取代了价值观吗?我希望将这些值加在一起,而不是完全替换它们。@michael0196关于
stats.add(game,fill\u value=0)
我建议在结尾处
stats=stats.astype(int).reset\u index()
。不幸的是,
update
有一个变量,由于内部使用了
NaN
,该变量将
int
更改为
float
。但这不是完全取代了这些值吗?我希望将这些值加在一起,而不是完全替换它们。@michael0196关于
stats.add(game,fill\u value=0)
我建议在结尾处
stats=stats.astype(int).reset\u index()
。不幸的是,
update
有一个变量,由于内部使用了
NaN
,该变量将
int
更改为
float