[英]How to separate nested comma separated column values in pandas data frame using python?
I have dataframe like below我有 dataframe 如下所示
df (Input Data) df(输入数据)
ID Status linkedShipments
12 Active [{'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '2021121'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211215'}]
32 Expired [{'SID': 'CHSGI422', 'Code': 'CHSGI421', 'Num': '4024421'}, {'SID': 'GBDXY551', 'Code': 'GBDXY55', 'Num': '20211222'}]
36 Expired [{'SID': 'CHSGI428', 'Code': 'CHSGI907', 'Num': '4024568'}, {'SID': 'GBDXY556', 'Code': 'GBDXY55', 'Num': '20211333'}]
Expected Output预计 Output
ID SID Code Num Status
12 GBDXY551 GBDXY55 2021121 Active
12 GBDXY551 GBDXY55 20211215 Active
32 CHSGI422 CHSGI421 4024421 Expired
32 GBDXY551 GBDXY55 20211222 Expired
36 CHSGI428 CHSGI907 4024568 Expired
36 GBDXY556 GBDXY55 20211333 Expired
**My Current Code**
This works only with one Key and I also want add Status Column to output data frame how can that be done.这仅适用于一个键,我还想将状态列添加到 output 数据帧如何做到这一点。
#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))
This can be achieved with a combination of explode
and apply(pd.Series)
:这可以通过组合
explode
和apply(pd.Series)
来实现:
df2 = df.explode('linkedShipments').reset_index(drop = True)
df2.join(df2['linkedShipments'].apply(pd.Series)).drop(columns = 'linkedShipments')
output: output:
ID Status SID Code Num
0 12 Active GBDXY551 GBDXY55 2021121
1 12 Active GBDXY551 GBDXY55 20211215
2 32 Expired CHSGI422 CHSGI421 4024421
3 32 Expired GBDXY551 GBDXY55 20211222
4 36 Expired CHSGI428 CHSGI907 4024568
5 36 Expired GBDXY556 GBDXY55 20211333
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.