对应 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
最近,我使用 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