一种方法如下。
我们开始准备专栏parent_id
df_new = df[df['to_be_deleted'] == 0].groupby('mobile_number')['id'].apply(lambda x: ','.join(x.astype(str))).reset_index()
[Out]:
mobile_number id
0 123 1
1 456 4
2 789 5
3 1234 7
还有一件事要做:将列id 更改为parent_id。为此,可以使用pandas.DataFrame.rename,如下所示
df_new.rename(columns={'id': 'parent_id'}, inplace=True)
[Out]:
mobile_number parent_id
0 123 1
1 456 4
2 789 5
3 1234 7
现在,准备好parent_id,只需调整mobile_number 列以获得child_id。
df_new['child_id'] = df_new['mobile_number'].apply(lambda x: ','.join(df[(df['mobile_number'] == x) & (df['to_be_deleted'] == 1)]['id'].astype(str)))
[Out]:
mobile_number parent_id child_id
0 123 1 2,3
1 456 4
2 789 5 6,8
3 1234 7
最后,由于不想要列mobile_number,可以使用pandas.DataFrame.pop 将其删除
df_new.pop('mobile_number')
[Out]:
parent_id child_id
0 1 2,3
1 4
2 5 6,8
3 7
有空间将所有内容包装在一个函数中,如下所示
def summarization(df):
df_new = df[df['to_be_deleted'] == 0].groupby('mobile_number')['id'].apply(lambda x: ','.join(x.astype(str))).reset_index()
df_new.rename(columns={'id': 'parent_id'}, inplace=True)
df_new['child_id'] = df_new['mobile_number'].apply(lambda x: ','.join(df[(df['mobile_number'] == x) & (df['to_be_deleted'] == 1)]['id'].astype(str)))
df_new.pop('mobile_number')
return df_new
然后所要做的就是将该函数应用于数据帧
df_new = summarization(df)
[Out]:
parent_id child_id
0 1 2,3
1 4
2 5 6,8
3 7