最近,我使用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
如果“赢家”的值在两个数据框中匹配,我是否可以使用一个pandas匹配来显示“颜色”的良好值?
我已经尝试过map()函数和get_loc(),但是效果不好。
答案 0 :(得分:1)
您可以使用Series
创建的df2
{/ 3}}:
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
如果只有on='winner'
中的公共列为DataFrame
),则map
(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