Как я могу объединить две строки в одном кадре данных / панды - PullRequest
2 голосов
/ 10 октября 2019

у меня есть набор данных, включающий следующие столбцы: (№ заказа, № накладной, Дата заказа, Запланировано на, Тип, Плата за доставку, Сбор наличных, Работник, Отправлено, Завершено, Присвоено, Статус)

** каждый заказ представлен в двух строках: первый тип: PICKUP, второй тип: DELIVERY (с таким же порядком # и некоторыми столбцами, например:

   Unnamed: 0     Order #  Waybill #             Order date  \
0           0  9920000150        NaN  01 Aug, 2019 12:30 PM   
1           1  9920000150        NaN  01 Aug, 2019 12:30 PM   

           Scheduled for      Type  Delivery Fee  Cash collection   Worker  \
0  01 Aug, 2019 03:00 PM    PICKUP           NaN              NaN  Driver1   
1  01 Aug, 2019 03:00 PM  DELIVERY           NaN            135.0  Driver1   

              Dispatched              Completed            Assigned On  \
0  01 Aug, 2019 01:49 PM  01 Aug, 2019 01:51 PM  01 Aug, 2019 01:42 PM   
1  01 Aug, 2019 01:55 PM  01 Aug, 2019 02:08 PM  01 Aug, 2019 01:42 PM   

      Status  
0  Completed  
1  Completed  

. Я хочу объединить две строки в одну, чтобы столбцы быликак это: Таким образом, один столбец может быть представлен следующим образом: [№ заказа, № накладной, Дата заказа, Запланировано, Плата за доставку, Сбор наличных, Работник, Отправка с доставкой, Погрузка с завершением, Назначение при получении, Состояние при получении, Отправка_доставка, Завершение доставки, Назначение при доставке, Status_delivery]

я только что попробовал это, и это не работает df1 = df.assign (cid = df.groupby (['Order #', 'Waybill #', 'Date date', 'Scheduled for']). cumcount ()). set_index ([' Order # ',' cid ']). unstack (-1) .sort_index (1,1)

1 Ответ

1 голос
/ 10 октября 2019

Вот краткий пример, вы можете расширить его до нескольких столбцов. Я переименовал столбцы, чтобы у них не было конфликта.

pickup_df = df[df['type'] == "PICKUP"]
delivery_df = df[df['type'] == "DELIVERY"]

pickup_df = pickup_df[['Order#','Waybill', 'Orderdate']]
delivery_df = pickup_df[['Order#','Waybill', 'Orderdate']]

pickup_df.rename( columns={'Waybill' : 'Pickup Waybill', 'Orderdate' : 'Pickup Orderdate'}, inplace=True)
deliver_df.rename( columns={'Waybill' : 'Delivery Waybill', 'Orderdate' : 'Delivery Orderdate'}, inplace=True)

combined_df = pickup_df.merge(deliver_df, on='Order#', how='left')
...