我有以下名为“ df_1”的数据框。
Date HomeTeam AwayTeam
0 8/14/1993 Arsenal Coventry
1 8/14/1993 Aston Villa QPR
2 8/14/1993 Chelsea Blackburn
我也有一个名为“ df_2”的DataFrame。
Team Game N. Value
0 Arsenal 0 -1
1 QPR 1 2
2 Blackburn 2 4
3 Coventry 0 3
4 Chelsea 2 0
5 Aston Villa 1 -2
“游戏N”列中的数字。 df_2中的d对应于df_1中的索引号。而且两个表中的团队名称都相同。
通过创建两个新的名称为Value_Home和Value_Away的列,是否可以将df_2中“值”列中的每个值分配(附加)到df_1中的相应行(索引)。这是我想要达到的输出:
Date HomeTeam AwayTeam Value_Home Value_Away
0 8/14/1993 Arsenal Coventry -1 3
1 8/14/1993 Aston Villa QPR -2 2
2 8/14/1993 Chelsea Blackburn 0 4
答案 0 :(得分:1)
Merge df_1
with df_2
两次 1 :
import pandas as pd
df_1 = pd.DataFrame({'Date': ['8/14/1993', '8/14/1993', '8/14/1993'],
'HomeTeam': ['Arsenal', 'Aston Villa', 'Chelsea'],
'AwayTeam': ['Coventry', 'QPR', 'Blackburn']})
df_2 = pd.DataFrame({'Team': ['Arsenal', 'QPR', 'Blackburn', 'Coventry', 'Chelsea', 'Aston Villa'],
'Game N.': [0, 1, 2, 0, 2, 1],
'Value': [-1, 2, 4, 3, 0, -2]})
df_1 = df_1.reset_index()
result = (df_1.merge(df_2.rename(columns={'Team':'HomeTeam', 'Game N.':'index','Value':'Value_Home'}))
.merge(df_2.rename(columns={'Team':'AwayTeam', 'Game N.':'index','Value':'Value_Away'})))
result = result.drop('index', axis=1)
print(result)
收益
Date HomeTeam AwayTeam Value_Home Value_Away
0 8/14/1993 Arsenal Coventry -1 3
1 8/14/1993 Aston Villa QPR -2 2
2 8/14/1993 Chelsea Blackburn 0 4
1
默认情况下,merge
在两个DataFrame共同共享的所有列名称上合并。因此,诀窍是重命名df_2
的列,以便合并发生在适当的列上。
例如,给定df_1
和df_2
如下:
In [39]: df_1
Out[39]:
index Date HomeTeam AwayTeam
0 0 8/14/1993 Arsenal Coventry
1 1 8/14/1993 Aston Villa QPR
2 2 8/14/1993 Chelsea Blackburn
In [40]: df_2
Out[40]:
Team Game N. Value
0 Arsenal 0 -1
1 QPR 1 2
2 Blackburn 2 4
3 Coventry 0 3
4 Chelsea 2 0
5 Aston Villa 1 -2
我们希望将df_1
的{{1}}和index
列与HomeTeam
的{{1}}和df_2
列合并。
因此,如果我们像这样重命名Game N.
的列:
Team
然后合并两个DataFrame产生
df_2
可以用相同的方式获得In [31]: df_2.rename(columns={'Team':'HomeTeam', 'Game N.':'index','Value':'Value_Home'})
Out[36]:
HomeTeam index Value_Home
0 Arsenal 0 -1
1 QPR 1 2
2 Blackburn 2 4
3 Coventry 0 3
4 Chelsea 2 0
5 Aston Villa 1 -2
列。