मेरे पास हजारों पंक्तियों के साथ एक डेटाफ्रेम है, यह नमूना df विभिन्न प्रकार की पंक्तियाँ देता है जो मौजूद हैं:
df = pd.DataFrame({'col1': ['1', '2', '2', '3'],
'col2': ['10', '15', '20', '30'],
'col3': ['cat', 'dog', 'cat', 'cat'],
'col4': [0.2, 0.9, 'dog', 0.5],
'col5': [None, None, 0.3, 'dog'],
'col6': [None, None, None, 0.1]})
col1
, col2
जैसे हैं वैसे ही ठीक हैं। शेष पंक्ति के लिए, मैं चाहता हूं कि cat
, dog
, और catdog
कॉलम हेडर बनें। जब एक कॉलम हेडर एक पंक्ति में मौजूद होता है, तो उसके ठीक बाद का कोई भी मान उस कॉलम में एक मान होना चाहिए।
प्रत्येक पंक्ति के लिए नियम:
- यदि किसी पंक्ति में केवल
cat
हैं, तो दशमलव मानcat
कॉलम (dog
औरcatdog
कॉलम में जाता है।None
) है। - यदि किसी पंक्ति में केवल
dog
हैं, तो दशमलव मानdog
कॉलम (cat
औरcatdog
में जाता है। कॉलम मेंNone
) हैं। - यदि किसी पंक्ति में
cat
औरdog
दोनों हैं, लेकिन केवल 1 दशमलव संख्या है, तो वह दशमलवcatdog
के साथ-साथcat
औरdog
के अंतर्गत जाना चाहिए। - यदि किसी पंक्ति में
cat
औरdog
दोनों हैं, लेकिन 2 दशमलव संख्याएं हैं, तो दशमलव संख्या उस कॉलम के नीचे जाती है जो संख्या से पहले होती है (None
के अंतर्गतcatdog
)।
उदाहरण के लिए, पहली पंक्ति में, 0.2
, cat
के ठीक बाद में है, इसलिए यह उस कॉलम में जाएगा (एक पंक्ति में 1
और 10
से col1/col2
).
तीसरी पंक्ति में, 0.3
, "cat
,dog
" के बाद है, इसलिए 0.3
सभी कॉलम में जाता है: cat
, dog
, और catdog
।
वांछित आउटपुट:
dfoutput = pd.DataFrame({'col1': ['1', '2', '2', '3'],
'col2': ['10', '15', '20', '30'],
'cat': [0.2, None, 0.3, 0.5],
'dog': [None, 0.9, 0.3, 0.1],
'catdog': [None, None, 0.3, None]})
1 उत्तर
np.select
और np.where
का प्रयोग करें:
cond1 = (df['col3']=='cat') & (df['col4']!='dog')
cond2 = (df['col3']=='cat') & (df['col4']=='dog')
cond3 = df['col3']=='dog'
cond4 = df['col5']=='dog'
cond5 = df['col4']=='dog'
df['cat'] = np.select([cond1, cond2], [df['col4'], df['col5']], None)
df['dog'] = np.select([cond3,cond4,cond5], [df['col4'], df['col6'], df['col5']], None)
df['catdog'] = np.where(cond2, df['col5'], None)
df.drop(['col3','col4','col5','col6'], axis=1, inplace=True)
print(df)
आउटपुट:
col1 col2 cat dog catdog
0 1 10 0.2 None None
1 2 15 None 0.9 None
2 2 20 0.3 0.3 0.3
3 3 30 0.5 0.1 None
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।