मेरे पास हजारों पंक्तियों के साथ एक डेटाफ्रेम है, यह नमूना 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]})
2
Liquidity 14 फरवरी 2019, 06:25

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 
1
keineahnung2345 14 फरवरी 2019, 08:39