如何合并匹配索引和拆分其他列的数据框?

How to consolidate the dataframe of matching indices and splitting other columns?

我有一个数据框,需要针对相同的 ID 进行合并,并将其他列拆分为不同的列。我已经介绍了示例输入数据框和所需的输出数据框。

输入数据帧示例

data = {'id':[1, 1, 1, 2, 2, 2], 
    'status':[3, 3, 3, 4, 4, 4],
    'amount':[30, 40, 50, 60, 70, 80],
    'paid':[100, 200, 300, 400, 500, 600]}

dataframe = pd.DataFrame(data)


   id status amount paid
0   1   3    30     100
1   1   3    40     200
2   1   3    50     300
3   2   4    60     400
4   2   4    70     500
5   2   4    80     600

需要输出数据帧

   id   status  amount_1 amount_2 amount_3 paid_1 paid_2 paid_3
0   1    3       30       40       50       100    200    300
1   2    4       60       70       80       300    400    600

以下是否实现了您所追求的目标?

重现你的例子

import pandas as pd
import numpy as np

data = {'id':[1, 1, 1, 2, 2, 2], 
    'status':[3, 3, 3, 4, 4, 4],
    'amount':[30, 40, 50, 60, 70, 80],
    'paid':[100, 200, 300, 400, 500, 600]}

dataframe = pd.DataFrame(data)

输出:

第一步:在每个组内创建索引,并设置dataframe的索引

dataframe['group_id'] = dataframe.groupby('id')['id'].transform(lambda x: np.arange(1,len(x)+1))
dataframe.set_index(['id', 'group_id'], append=False, inplace=True)

现在数据框看起来像:

第 3 步:在组索引上取消堆叠

dataframe = dataframe.unstack(level=-1)

现在数据框看起来像:

最后一步:展平列名称以匹配您想要的输出,并删除额外的状态列

dataframe.columns = [f"{x}_{y}" for x,y in dataframe.columns]
dataframe.drop(['status_2', 'status_3'], axis=1, inplace=True)
dataframe.rename({'status_1': 'status'}, axis=1, inplace=True)

给出最终形式: