如何合并匹配索引和拆分其他列的数据框?
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)
给出最终形式:
我有一个数据框,需要针对相同的 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)
给出最终形式: