用Python转换和附加DataFrames

时间:2019-01-23 16:25:57

标签: python dataframe

我有以下名为“ 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

1 个答案:

答案 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_1df_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 列。