对应 table 与 Pandas

Correspondence table with Pandas

最近,我使用 pandas 来处理包含选举数据的 csv。在我的 DataFrame 中,我有一个区域的每个城市的列 'winner'。

可以表示为:

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

事情是这样的:我想创建一个名为 "coulour" 的新列。目标是根据 'winner' 值使每个城市具有独特的颜色。

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

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

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

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

您可以使用 map by Series 创建于 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