如何根据多列中的相似/匹配项在2个数据帧之间复制值?

问题描述 投票:0回答:1

我有 2 个数据框(df1 和 df2),它们看起来像这样:

df1
index   gameID  Team        A      B      C
0       0001    Lakers      10     100    90
1       0001    Clippers    20     105    91
2       0002    Celtics     30     110    92
3       0002    Warriors    40     115    93
4       0003    Suns        10     100    94
5       0003    Jazz        20     105    95
6       0004    Heat        30     110    96
7       0004    Magic       40     115    97
df2
index   gameID  Team        Player      D
0       0001    Lakers      Lebron      30.5
1       0001    Clippers    Harden      29.9
2       0002    Celtics     Tatum       31.2 
3       0002    Warriors    Curry       29.8    
4       0003    Suns        Durant      40.6    
5       0003    Jazz        Clarkson    21.5    
6       0004    Heat        Butler      25.5    
7       0004    Magic       Banchero    27.8
8       0005    Mavs        Doncic      39.9
9       0005    Raptors     Quickley    19.6

我希望能够将列 'A' 'B' 和 'C' 复制到 df2,这样,如果这些列具有匹配的 gameIDTeam 列,那么它会复制这些列,因此结果将是:


df2
index   gameID  Team        Player      D        A     B     C
0       0001    Lakers      Lebron      30.5     10    100   90
1       0001    Clippers    Harden      29.9     20    105   91
2       0002    Celtics     Tatum       31.2     30    110   92
3       0002    Warriors    Curry       29.8     40    115   93
4       0003    Suns        Durant      40.6     10    100   94
5       0003    Jazz        Clarkson    21.5     20    105   95
6       0004    Heat        Butler      25.5     30    110   96
7       0004    Magic       Banchero    27.8     40    115   97
8       0005    Mavs        Doncic      39.9     NaN   NaN   NaN
9       0005    Raptors     Quickley    19.6     NaN   NaN   NaN

我已经尝试过将

dict
map
一起使用,但 dict 使用键值,并且我想要处理的条件使用超过 1 列

python arrays dataframe mapping series
1个回答
0
投票
  • pd.merge()
    用于在公共列
    gameID
    Team
    上将 df2 与 df1 合并。
  • 我们使用 how='left' 来确保保留 df2 中的所有行,并且仅在匹配时才添加 A、B 和 C 列。如果没有匹配,值将为 NaN。
  • [['gameID', 'Team', 'A', 'B', 'C']]
    用于仅从 df1 中选择相关列。
import pandas as pd

df1 = pd.DataFrame({
    'gameID': ['0001', '0001', '0002', '0002', '0003', '0003', '0004', '0004'],
    'Team': ['Lakers', 'Clippers', 'Celtics', 'Warriors', 'Suns', 'Jazz', 'Heat', 'Magic'],
    'A': [10, 20, 30, 40, 10, 20, 30, 40],
    'B': [100, 105, 110, 115, 100, 105, 110, 115],
    'C': [90, 91, 92, 93, 94, 95, 96, 97]
})

df2 = pd.DataFrame({
    'gameID': ['0001', '0001', '0002', '0002', '0003', '0003', '0004', '0004', '0005', '0005'],
    'Team': ['Lakers', 'Clippers', 'Celtics', 'Warriors', 'Suns', 'Jazz', 'Heat', 'Magic', 'Mavs', 'Raptors'],
    'Player': ['Lebron', 'Harden', 'Tatum', 'Curry', 'Durant', 'Clarkson', 'Butler', 'Banchero', 'Doncic', 'Quickley'],
    'D': [30.5, 29.9, 31.2, 29.8, 40.6, 21.5, 25.5, 27.8, 39.9, 19.6]
})

df_merged = pd.merge(df2, df1[['gameID', 'Team', 'A', 'B', 'C']], on=['gameID', 'Team'], how='left')

print(df_merged)
© www.soinside.com 2019 - 2024. All rights reserved.