2016-05-31 36 views
0

我有一個數據幀(DF),看起來像這樣:把每2行數據幀到1分×2列

date  ID Team P F T TO 
0 20160101 537 Bobcats 5 10 0 3 
1 20160101 538 Spartans8 10 1 4 
2 20160101 539 Tigers 7 8 2 3 
3 20160101 540 Vikings 10 5 0 1 
4 20160101 541 Smurfs 5 3 0 2 
5 20160101 542 Winners 6 9 1 0 

我想每2行凝結成1,仍然保持所有的使新的數據幀(new_df)看起來像這樣:

date  ID1 Team1 P1 F1 T1 TO1 ID2 Team2 P2 F2 T2 TO2 
0 20160101 537 Bobcats 5 10 0 3 538 Spartans8 10 1 4 
2 20160101 539 Tigers 7 8 2 3 540 Vikings 10 5 0 1 
4 20160101 541 Smurfs 5 3 0 2 542 Winners 6 9 1 0 

什麼是使用Python做到這一點的最有效方法?

回答

1

一種方法是找出每個團隊的對手,然後將表格合併到自己。我假設根據你的例子,ID 2n-1與ID 2n對戰。如果不是這樣,請相應調整(例如,您可以根據索引計算對手)。

D['ID_opp']=D['ID'].apply(lambda x:x-1 if x%2==0 else np.nan) 
D 


    date ID Team P F T TO ID_opp 
0 20160101 537 Bobcats 5 10 0 3 NaN 
1 20160101 538 Spartans 8 10 1 4 537 
2 20160101 539 Tigers 7 8 2 3 NaN 
3 20160101 540 Vikings 10 5 0 1 539 
4 20160101 541 Smurfs 5 3 0 2 NaN 
5 20160101 542 Winners 6 9 1 0 541 

,然後執行合併

D.merge(D,left_on='ID',right_on='ID_opp',suffixes=('1','2')).drop(['ID_opp1','ID_opp2','date2'],axis=1) 

     date1 ID1 Team1 P1 F1 T1 TO1 ID2 Team2 P2 F2 T2 TO2 
0 20160101 537 Bobcats 5 10 0 3 538 Spartans 8 10 1 4 
1 20160101 539 Tigers 7 8 2 3 540 Vikings 10 5 0 1 
2 20160101 541 Smurfs 5 3 0 2 542 Winners 6 9 1 0 
+0

如果「下一行」是真的搞清楚了對手的方式,那麼像這樣的工作:'d [「ID_opp」] = [ D ['ID']。iloc [i-1] if i%2 == 1 else np.nan for i in range(D.shape [0])]' –