मेरे पास नमूना के रूप में यह डेटा सेट है:

df = pd.DataFrame({'CL1':['A B C','C A N']},
                columns=['CL1','CL2','CL3','CL4']) 
  
     CL1  CL2  CL3  CL4  
0  A B C  NaN  NaN  NaN  
1  C A N  NaN  NaN  NaN  
 
         

मेरा लक्ष्य: निम्नलिखित चरणों के साथ डेटा फ्रेम में शब्दों के संयोजन के सबसे दोहराव का पता लगाना।

    1. विभाजक के रूप में (,) के साथ प्रत्येक मान को अलग करें और कॉलम CL2 में जोड़ें:
     CL1     CL2     CL3  CL4 
0  'A B C'  'A,B,C'  NaN  NaN 
1  'C A N'  'C,A,N'  NaN  NaN 

    1. कॉलम CL2 में कॉलम CL3 में मान का पृथक्करण:
     CL1     CL2     CL3          CL4 
0  'A B C'  'A,B,C'  'A','B','C'  NaN 
1  'C A N'  'C,A,N'  'C','A','N'  NaN 

     
    1. स्तंभ CL4
    2. . का संघ (सांख्यिकी से सिद्धांत निर्धारित करें)
     CL1     CL2     CL3          CL4 
0  'A B C'  'A,B,C'  'A','B','C'  [ [A],[B],[C],[A,B],[A,C],[B,C],[A,B,C] ] 
1  'C A N'  'C,A,N'  'C','A','N'  [ [C],[A],[N],[A,C],[C,N],[A,N],[C,A,N] ] 
       
    1. नए कॉलम CL5 में कॉलम CL4 के प्रत्येक मान की पुनरावृत्ति को नए डेटा फ़्रेम में खोजना और Count में जोड़ना:
     CL5      Count   
0    [A]       2
1    [B]       1
2    [C]       2
3    [D]       1
4    [N]       1
5    [A,B]     1
etc..

-2
Jsmoka 5 फरवरी 2021, 11:52
ऐसा लगता है कि आप जानते हैं कि आप क्या चाहते हैं। जैसा कि आप इसके बारे में सोचते हैं यह एक बहु-चरणीय प्रक्रिया है। वहां पहुंचने के लिए आपने क्या किया? न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण? कहाँ रह गया।
 – 
Patrick Artner
5 फरवरी 2021, 11:56

1 उत्तर

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

आप split का उपयोग स्पेसम द्वारा मानों के आधार पर कर सकते हैं, फिर सभी संयोजनों के लिए कस्टम फ़ंक्शन को कॉल कर सकते हैं और गणना के लिए Series.explode Series.value_counts:

df = pd.DataFrame({'CL1':['A B C','C A N','D E F','F X G']},
                         columns=['CL1','CL2','CL3','CL4']) 


#https://stackoverflow.com/a/5898031/2901002
from itertools import chain, combinations
def all_subsets(ss):
    return chain(*map(lambda x: combinations(ss, x), range(1, len(ss)+1)))    

df = (df['CL1'].apply(lambda x: list(all_subsets(x.split())))
               .explode()
               .value_counts()
               .rename_axis('CL5')
               .reset_index(name='count'))
print (df.head(10))
         CL5  count
0       (C,)      2
1       (F,)      2
2       (A,)      2
3     (E, F)      1
4     (F, G)      1
5     (A, B)      1
6     (C, A)      1
7     (A, C)      1
8  (F, X, G)      1
9       (D,)      1

df['CL5'] = df['CL5'].apply(list)
print (df.head(10))
         CL5  count
0        [C]      2
1        [F]      2
2        [A]      2
3     [E, F]      1
4     [F, G]      1
5     [A, B]      1
6     [C, A]      1
7     [A, C]      1
8  [F, X, G]      1
9        [D]      1
2
jezrael 5 फरवरी 2021, 12:34
लेकिन मेरी समस्या चरण 3 और 3 है। str.split() के साथ मैं एक दूसरे से डंक अलग नहीं कर सकता
 – 
Jsmoka
5 फरवरी 2021, 12:03
- समझ में नहीं आ रहा है, आपके समाधान में , द्वारा रिक्त स्थान है और फिर , द्वारा विभाजित किया गया है, मेरे समाधान में अंतरिक्ष द्वारा विभाजित किया गया है। यह बेहतर नहीं है? या बदलने का कोई कारण है?
 – 
jezrael
5 फरवरी 2021, 12:05
कारण यह है कि मैं sql से डेटासेट बन गया: उदा। ('जॉन, डू') और कभी-कभी ('जॉन डू')
 – 
Jsmoka
5 फरवरी 2021, 12:14
1
हाँ, मैं कहता हूँ 'John Do'.replace(' ', ',').split(',') 'John Do'.split() जैसा ही है
 – 
jezrael
5 फरवरी 2021, 12:15
- यदि अंतरिक्ष से विभाजित करने की आवश्यकता नहीं है तो इसे समझाने के लिए डेटा नमूना बदलना संभव है, कौन से तारों को विभाजित नहीं किया जा सकता है?
 – 
jezrael
5 फरवरी 2021, 12:16