我有2个熊猫数据帧,并且想要从一个数据帧中提取值以填充另一个数据帧的列?

我的数据与NBA比赛结果有关,我的第一个数据帧是:


INDEX TEAM  OFFRTG  DEFRTG  NETRTG  AST%    AST/TO  ASTRATIO    OREB%   DREB%   REB%    TOV%    EFG%    TS% PACE    PIE

0   Atlanta Hawks   108.8   93.4    15.4    44.7    1.13    13.0    44.4    61.7    53.5    16.5    47.1    49.7    91.00   66.2

1   Boston Celtics  95.4    84.2    11.2    47.7    0.84    12.6    24.7    69.6    48.2    19.0    45.9    51.9    97.75   60.1

2   Charlotte Bobcats   90.8    111.6   -20.8   64.0    1.23    13.6    32.1    64.1    45.7    14.9    35.8    45.1    86.50   31.2

3   Chicago Bulls   96.9    100.0   -3.1    63.3    0.95    14.3    38.1    69.3    53.0    20.6    41.5    50.7    96.25   50.5

4   Cleveland Cavaliers 100.6   92.9    7.7 60.9    1.05    16.0    32.1    71.6    54.1    20.6    49.3    54.1    90.50   61.2

抱歉,如果以上是凌乱的,但基本上它是所有团队的每月统计数据。


我的第二个数据框包含给定月份的匹配结果,如下所示:


INDEX   Team1   Team1Score  Team2   Team2Score  Team1Win    Team1Home

0   Cleveland Cavaliers 85  Boston Celtics  90  0   0

1   Milwaukee Bucks 95  Chicago Bulls   108 0   0

2   Portland Trail Blazers  76  Los Angeles Lakers  96  0   0

3   Toronto Raptors 95  Philadelphia 76ers  84  1   0

4   New Jersey Nets 95  Washington Wizards  85  1   0

基本上,我想添加Team1OFFRTG列和每个团队的所有其他统计数据,以将一个团队的统计数据与其他团队进行比较,以便“预测”Team1Win变量。


如何组合表以创建所需的最终数据框?


红糖糍粑
浏览 110回答 2
2回答

慕桂英546537

您可以使用合并teams = pd.DataFrame({"team": ["T0", "T1", "T2", "T3", "T4", "T5"],                     "A": ["A0", "A1", "A2", "A3", "A4", "A5"]})t1_stats = teams.add_prefix("T1_")t2_stats = teams.add_prefix("T2_")games = pd.DataFrame({"gameID": ["G0", "G1", "G2"],                      "T1": [ "T0", "T2", "T4"],                      "T2": [ "T1", "T5", "T3"],                      "X": ["X0", "X1", "X2"]})games_with_team_stats = games.merge(t1_stats, "left", left_on="T1", right_on="T1_team").merge(t2_stats, left_on="T2", right_on="T2_team")合并的工作方式类似于 SQL 联接,但有一个主要缺点 - 在合并过程中无法重命名合并的数据帧的键。对于您来说,最简单的选择似乎是创建 2 个临时数据帧,这些数据帧具有用于合并的相应列名。

守着一只汪

提供的解决方案是正确的,因此请接受该解决方案,但您也可以在执行合并的行中添加前缀:import pandas as pdstats = pd.DataFrame([   ['Atlanta Hawks',   108.8 ,  93.4  ,  15.4 ,   44.7  ,  1.13  ,  13.0  ,  44.4  ,  61.7  ,  53.5 ,   16.5  ,  47.1 ,   49.7  ,  91.00 ,  66.2],   ['Boston Celtics',  95.4  ,  84.2  ,  11.2  ,  47.7 ,   0.84  ,  12.6  ,  24.7  ,  69.6 ,   48.2,    19.0 ,   45.9  ,  51.9  ,  97.75  , 60.1],   ['Charlotte Bobcats',   90.8 ,   111.6 ,  -20.8  , 64.0  ,  1.23  ,  13.6  ,  32.1  ,  64.1  ,  45.7  ,  14.9  ,  35.8 ,   45.1  ,  86.50 ,  31.2],   ['Chicago Bulls',   96.9,    100.0 ,  -3.1  ,  63.3 ,   0.95  ,  14.3  ,  38.1  ,  69.3  ,  53.0  ,  20.6  ,  41.5 ,   50.7 ,   96.25 ,  50.5],   ['Cleveland Cavaliers', 100.6 ,  92.9 ,   7.7, 60.9   , 1.05 ,   16.0    ,32.1 ,   71.6,    54.1,    20.6  ,  49.3 ,   54.1 ,   90.50  , 61.2]],   columns=['TEAM','OFFRTG','DEFRTG','NETRTG','AST%','AST/TO','ASTRATIO','OREB%','DREB%','REB%','TOV%','EFG%',         'TS%','PACE','PIE'])matchups = pd.DataFrame([   ['Cleveland Cavaliers', 85 , 'Boston Celtics' , 90,  0 ,  0],   ['Milwaukee Bucks', 95 , 'Chicago Bulls' ,  108, 0 ,  0],   ['Portland Trail Blazers',  76 , 'Los Angeles Lakers' , 96 , 0  , 0],   ['Toronto Raptors', 95 , 'Philadelphia 76ers',  84 , 1 ,  0],   ['New Jersey Nets', 95 , 'Washington Wizards' , 85 , 1 ,  0 ]],   columns = ['Team1','Team1Score','Team2','Team2Score','Team1Win','Team1Home'])df = matchups.merge(stats.add_prefix('Team1'), how='left', left_on=['Team1'], right_on=['Team1TEAM']).drop(['Team1TEAM'],axis=1).merge(stats.add_prefix('Team2'), how='left', left_on=['Team2'], right_on=['Team2TEAM']).drop(['Team2TEAM'],axis=1)输出:print(df.to_string())                    Team1  Team1Score               Team2  Team2Score  Team1Win  Team1Home  Team1OFFRTG  Team1DEFRTG  Team1NETRTG  Team1AST%  Team1AST/TO  Team1ASTRATIO  Team1OREB%  Team1DREB%  Team1REB%  Team1TOV%  Team1EFG%  Team1TS%  Team1PACE  Team1PIE  Team2OFFRTG  Team2DEFRTG  Team2NETRTG  Team2AST%  Team2AST/TO  Team2ASTRATIO  Team2OREB%  Team2DREB%  Team2REB%  Team2TOV%  Team2EFG%  Team2TS%  Team2PACE  Team2PIE0     Cleveland Cavaliers          85      Boston Celtics          90         0          0        100.6         92.9          7.7       60.9         1.05           16.0        32.1        71.6       54.1       20.6       49.3      54.1       90.5      61.2         95.4         84.2         11.2       47.7         0.84           12.6        24.7        69.6       48.2       19.0       45.9      51.9      97.75      60.11         Milwaukee Bucks          95       Chicago Bulls         108         0          0          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN         96.9        100.0         -3.1       63.3         0.95           14.3        38.1        69.3       53.0       20.6       41.5      50.7      96.25      50.52  Portland Trail Blazers          76  Los Angeles Lakers          96         0          0          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN3         Toronto Raptors          95  Philadelphia 76ers          84         1          0          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN4         New Jersey Nets          95  Washington Wizards          85         1          0          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN          NaN          NaN          NaN        NaN          NaN            NaN         NaN         NaN        NaN        NaN        NaN       NaN        NaN       NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python