मैं एक पांडा डेटाफ्रेम कॉलम df[link] के अंदर सरणी की नेस्टेड सरणी बनाने की कोशिश कर रहा हूं और मूल डेटाफ्रेम पर वापस संलग्न करता हूं। मेरे कोड में क्या गलत है और इसे कैसे ठीक करें?

त्रुटि:

त्रुटि प्रकार

ट्रेसबैक (सबसे हालिया कॉल अंतिम)

में
2 df2['shipmentNumber'] = df2.shipmentID.str.split('-',1).str[-1]
3 df2['link'] = pd.DataFrame({'link': df2.to_dict('records')})
----> 4 परिणाम ['लिंक'] = df2.groupby(df2.index).agg(list)['link']

c:\users\ashok.eapen\pycharmprojects\rs-components\venv\lib\site-packages\pandas\core\groupby\generic.py कुल मिलाकर (स्वयं, func, इंजन, engine_kwargs, *args, **kwargs)
940 डीईएफ़ एग्रीगेट(स्वयं, func=कोई नहीं, *args, engine=कोई नहीं, engine_kwargs=कोई नहीं, **kwargs):
941
--> 942 रीलेबलिंग, फंक, कॉलम, ऑर्डर = रिकंस्ट्रक्शन_फंक (फंक, **क्वार्ग्स)
943
944 अगर शायद_यूज_नम्बा (इंजन):

लेखन त्रुटि: 'डेटाफ़्रेम' ऑब्जेक्ट परिवर्तनशील हैं, इस प्रकार उन्हें हैश नहीं किया जा सकता है

मेरा इनपुट:

df6

ShipmentID                                                                             CustomerCode  
['USWPR04-20210429-S-00001', 'USWPR04-20210429-S-00002','USWPR04-20210429-S-00006']    USWPR04
['MSLPR04-20210429-S-00001', 'MSLPR04-20210429-S-00002']                               MSLPR04

मेरा कोड:

df2= df6.explode('shipmentID')
df2['shipmentNumber'] = df2.shipmentID.str.split('-',1).str[-1]
df2['link'] = pd.DataFrame({'link': df2.to_dict('records')})
result['link']  = df2.groupby(df2.index).agg(list)['link']

अपेक्षित आउटपुट कॉलम:

df['LinkID']

[{ "shipID": "USWPR04-20210429-S-00001", "customerCode": "USWPR04", "shiNumber": "20210429-S-00001" },
 { "shipID": "USWPR04-20210429-S-00002", "customerCode": "USWPR04", "shipNumber": "20210429-S-00002" },
 { "ShipID": "USWPR04-20210429-S-00002", "customerCode": "USWPR04", "shipNumber": "20210429-S-00006" }]

[{ "shipID": "MSLPR04-20210429-S-00001", "customerCode": "MSLPR04", "shiNumber": "20210429-S-00001" },
{ "shipID": "MSLPR04-20210429-S-00002", "customerCode": "MSLPR04", "shipNumber": "20210429-S-00002" }]

अपेक्षित अंतिम डेटाफ़्रेम:

ShipID                                                                             CustomerCode   link
['USWPR04-20210429-S-00001', 'USWPR04-20210429-S-00002','USWPR04-20210429-S-00006']    USWPR04    [{ "shipID": "USWPR04-20210429-S-00001", "customerCode": "USWPR04", "shiNumber": "20210429-S-00001" },{ "shipID": "USWPR04-20210429-S-00002", "customerCode": "USWPR04", "shipNumber": "20210429-S-00002" },{ "ShipID": "USWPR04-20210429-S-00002", "customerCode": "USWPR04", "shipNumber": "20210429-S-00006" }]
['MSLPR04-20210429-S-00001', 'MSLPR04-20210429-S-00002']                               MSLPR04    [{ "shipID": "MSLPR04-20210429-S-00001", "customerCode": "MSLPR04", "shiNumber": "20210429-S-00001" },{ "shipID": "MSLPR04-20210429-S-00002", "customerCode": "MSLPR04", "shipNumber": "20210429-S-00002" }]
1
Rahul rajan 8 जुलाई 2021, 09:51

1 उत्तर

सबसे बढ़िया उत्तर

उपयोग:

#add df2.index first
df2['link'] = pd.DataFrame({'link': df2.to_dict('records')}, index=df2.index)
#assign to `df6`
df6['link'] = df2.groupby(df2.index)['link'].agg(list)

या इसके बजाय आपकी समाधान सूची समझ:

df6['link1'] = [[{'shipID':x, 'CustomerCode':b, 'shipmentNumber': x.split('-',1)[-1]} 
                for x in a] for a, b in zip(df6['ShipmentID'],df6['CustomerCode'])]

आउटपुट समान हैं:

print (df6['link'] == df6['link1'])
0    True
1    True
dtype: bool
1
jezrael 8 जुलाई 2021, 10:19