我有一个如下所示的Dataframe(df):
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
我正在尝试将每两行压缩为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执行此操作的最有效方法是什么?
答案 0 :(得分: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