我有(df)如下所示的資料框
輸入
Df
ID linkedShipments
12 [{'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '2021121'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211215'}]
32 [{'SID': 'CHSGI422', 'Code': 'CHSGI421', 'Num': '4024421'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211222'}]
預期產出
ID SID Code Num
12 GBDXY551 GBDXY55 2021121
12 GBDXY551 GBDXY55 20211215
32 CHSGI422 CHSGI421 4024421
32 GBDXY551 GBDXY55 20211222
如何在熊貓中做到這一點?
uj5u.com熱心網友回復:
最簡單的方法是:
- json.loads 每行linkedShipments
- 遍歷linkedShipments中的所有元素
- 將 ID 和 linksShipments 的每個元素組合為行字典
- 追加到新資料
而python代碼在下面
import pandas as pd
import json
#The simulation of data
data = {"ID": [12, 24],
"linkedShipments": ["[{'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '2021121'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211215'}]",
"[{'SID': 'CHSGI422', 'Code': 'CHSGI421', 'Num': '4024421'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211222'}]"]
}
#load as dataframe
df = pd.DataFrame(data)
new_data = {} #define new data
#treverse all rows in current data
for index, row in df.iterrows():
#json only accept double quotes, so convert singal quotes to double quotes
shipment_dict_list = json.loads(row['linkedShipments'].replace("\'", "\""))
for shipment_dict in shipment_dict_list:
new_data.setdefault("ID",[]).append(row['ID'])
for key in shipment_dict:
new_data.setdefault(key,[]).append(shipment_dict[key])
print(pd.DataFrame(new_data))
結果如下:
ID SID Code Num
0 12 GBDXY551 GBDXY55 2021121
1 12 GBDXY551 GBDXY55 20211215
2 24 CHSGI422 CHSGI421 4024421
3 24 GBDXY551 GBDXY55 20211222
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/383803.html
上一篇:在python中的一列中合并多列
下一篇:按年份劃分Pandas列
