मेरे पास निम्न डेटा फ्रेम है:

    parent          0        1      2   3
0   14026529    14062504     0      0   0
1   14103793    14036094     0      0   0
2   14025454    14036094     0      0   0
3   14030252    14030253  14062647  0   0
4   14034704    14086964     0      0   0

और मुझे इसकी आवश्यकता है:

    parent_id   child_id
 0   14026529   14062504
 1   14025454   14036094
 2   14030252   14030253  
 3   14030252   14062647
 4   14103793   14036094
 5   14034704   14086964

यह सिर्फ एक बुनियादी उदाहरण है, वास्तविक सौदे में 60 से अधिक बच्चे हो सकते हैं।

3
lost_in_pandas 3 फरवरी 2020, 18:28

1 उत्तर

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

DataFrame.where का इस्तेमाल करें , stack और reset_index .
पहले Int64 के रूप में कास्ट करने से बच्चे_Id को स्टैकिंग प्रक्रिया के दौरान फ़्लोट करने के लिए कास्ट होने से रोका जा सकेगा।

(df.astype('Int64').where(df.ne(0))
 .set_index('parent')
 .stack()
 .reset_index(level=0, name='child'))

[बाहर]

     parent     child
0  14026529  14062504
0  14103793  14036094
0  14025454  14036094
0  14030252  14030253
1  14030252  14062647
0  14034704  14086964
2
Chris A 3 फरवरी 2020, 18:46