【问题标题】:Correspondence table with Pandas与熊猫的对应表
【发布时间】:2017-03-12 15:22:18
【问题描述】:

最近,我使用 pandas 来处理包含选举数据的 csv。在我的 DataFrame 中,我为一个地区的每个城市都有一个“获胜者”列。

可以表示为:

       city         winner
0      city1        party1
1      city2        party3
2      city3        party1
3      city4        party2
4      city5        party1
...
5188   city5189     party3

事情是这样的:我想创建一个名为“coulour”的新列。目标是根据“获胜者”的价值为每个城市提供独特的颜色。

为此,我可以使用 if/elif 语句,但我想知道是否可以使用对应表。例如,如果我一方面有我的巨大 DataFrame,另一方面有这个小的:

       winner       colour
0      party1       #000
1      party2       #fff
2      party3       #c0c0c0

如果 'winner' 的值在两个 DataFrame 中匹配,我可以使用 pandas 的一种功能来匹配显示 'color' 的良好值吗?

我试过map()函数和get_loc(),但效果不是很好。

【问题讨论】:

    标签: python pandas merge mapping series


    【解决方案1】:

    您可以使用由Series 创建的map df2

    print (df2.set_index('winner')['colour'])
    winner
    party1       #000
    party2       #fff
    party3    #c0c0c0
    Name: colour, dtype: object
    
    df1['new'] = df1.winner.map(df2.set_index('winner')['colour'])
    print (df1)
              city  winner      new
    0        city1  party1     #000
    1        city2  party3  #c0c0c0
    2        city3  party1     #000
    3        city4  party2     #fff
    4        city5  party1     #000
    5188  city5189  party3  #c0c0c0
    

    使用merge 的另一种解决方案(如果DataFrame 中只有公共列是winner,则可以省略on='winner'):

    print (pd.merge(df1,df2, how='left'))
           city  winner   colour
    0     city1  party1     #000
    1     city2  party3  #c0c0c0
    2     city3  party1     #000
    3     city4  party2     #fff
    4     city5  party1     #000
    5  city5189  party3  #c0c0c0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2020-05-23
      相关资源
      最近更新 更多