'How to rearrange table in Pandas
I have a table look like this in DataFrame:
| couriers | delivery | price_list |
|---|---|---|
| Alfred Locker | 2 day(s) | HKD $20 |
| Hongkong Post | 2 day(s) | HKD $50 |
| ZTO Express (To-Point) | 2 day(s) | HKD $20 |
| Zeek2Door (To Home) | 2 day(s) | HKD $40 |
| Kerry Express | 2 day(s) | HKD $30 |
I would like to rearrange the table like below:
| couriers_1 | delivery_1 | price_list_1 | couriers_2 | delivery_2 | price_list_2 | couriers_3 | delivery_3 | price_list_3 | couriers_4 | delivery_4 | price_list_4 | couriers_5 | delivery_5 | price_list_5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Alfred Locker | 2 day(s) | HKD $20 | Hongkong Post | 2 day(s) | HKD $50 | ZTO Express (To-Point) | 2 day(s) | HKD $20 | Zeek2Door (To Home) | 2 day(s) | HKD $40 | Kerry Express | 2 day(s) | HKD $30 |
How can I use Pandas to solve this? I can't figure it out!
Data:
{'couriers': ['Alfred Locker',
'Hongkong Post',
'ZTO Express (To-Point)',
'Zeek2Door (To Home)',
'Kerry Express'],
'delivery': ['2 day(s)', '2 day(s)', '2 day(s)', '2 day(s)', '2 day(s)'],
'price_list': ['HKD $20', 'HKD $50', 'HKD $20', 'HKD $40', 'HKD $30']}
Solution 1:[1]
So if you have a loop iterate over every element then use concat of pandas to attach each of them in order to form the data frame .
import pandas as pd
df = pd.DataFrame(zip(
["couriers", "Alfred Locker","Hongkong Post","ZTO Express(To-Point)","Zeek2Door(To Home)","Kerry Express"],
["delivery","2 day(s)","2 day(s)","2 day(s)","2 day(s)","2 day(s)"],
["price_list","HKD $20","HKD $50","HKD $20","HKD $40","HKD $30"],
))
counter_str = 1
#initialzing the df_result
df_result = ""
#iterating over the length so that we can add it to the string
for x in range(1,len(df)):
for i in df:
df_local = pd.DataFrame({df[i][0]+"_"+ str(x) : [df[i][counter_str]]})
if len(df_result)>0:
df_result = pd.concat([df_result,df_local], axis = 1, join='inner')
else:
df_result = df_local
counter_str+=1
print(df_result)
Output:
couriers_1 delivery_1 price_list_1 ... couriers_5 delivery_5 price_list_5
0 Alfred Locker 2 day(s) HKD $20 ... Kerry Express 2 day(s) HKD $30
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
