[英]How to merge 2 complicated data frames in python pandas?
我有2個熊貓數據幀。
dictionary1 = {'match_up' : ['1985_1116_1234' , '1985_1116_1475', '1985_1234_1172', '1985_1475_2132', '1985_1242_1325'], \
'result': [1, 1, 0, 0, 1], 'year':[1985,1985,1985,1985,1985] }
dictionary2 = {'team' : [1234 , 1475, 2132, 1172, 1242, 1116 , 1325], 'win_A_B': [0.667, 0.636, 0.621, 0.629, 0.615,0.943, 0.763], \
'year':[1985,1985,1985,1985,1985,1985,1985] }
df1 = pd.DataFrame(dictionary1)
df2 = pd.DataFrame(dictionary2)
df1:
match_up result year
0 1985_1116_1234 1 1985
1 1985_1116_1475 1 1985
2 1985_1234_1172 0 1985
3 1985_1475_2132 0 1985
4 1985_1242_1325 1 1985
df2:
team win_A_B year
1234 0.667 1985
1475 0.636 1985
2132 0.621 1985
1172 0.629 1985
1242 0.615 1985
1116 0.943 1985
1325 0.763 1985
數據幀df1
的列值是數據幀df2
列team
的df2
。 df2
中的列team
都是唯一值。
我需要以下列方式組合上述2個數據幀:
match_up result year team_A team_B win_A win_B
0 1985_1116_1234 1 1985 1116 1234 0.943 0.667
1 1985_1116_1475 1 1985 1116 1475 0.943 0.636
2 1985_1234_1172 0 1985 1234 1172 0.667 0.629
3 1985_1475_2132 0 1985 1475 2132 0.636 0.621
4 1985_1242_1325 1 1985 1242 1325 0.615 0.763
我知道我已經在熊貓問過類似的問題了。 我是大熊貓的新手,所以如果我問這樣的問題,請耐心等待。
以下將有效:
d_teams=pd.DataFrame( [[int(y) for y in x.split('_')[1:]] \
for x in df1.match_up], columns=('team_A', 'team_B') )
merged=pd.concat((df1,d_teams),axis=1)
df2i=df2.set_index('team')
merged['win_A']=df2i.ix[merged.team_A].reset_index().win_A_B
merged['win_B']=df2i.ix[merged.team_B].reset_index().win_A_B
首先,我們創建d_teams
,它是一個由match_up列組成的DataFrame,由'_'拆分,並轉換為int。 我們扔掉了一年,因為它已經包含在df1中,只是保留了team_A和team_B。 然后我們通過將其與df1連接來創建合並的數據幀。
接下來,我們創建df2i
,它是由團隊索引的df2。 然后我們可以使用merged.team_A或merged.team_B進行索引以獲取獲勝值。 但是,我們不希望結果由這些團隊編制索引,因此我們首先重置索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.