将每2行Dataframe转换为1行x 2列

时间:2016-05-31 17:16:39

标签: python pandas

我有一个如下所示的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执行此操作的最有效方法是什么?

1 个答案:

答案 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