मेरे पास नमूना के रूप में यह डेटा सेट है:
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
मेरा लक्ष्य: निम्नलिखित चरणों के साथ डेटा फ्रेम में शब्दों के संयोजन के सबसे दोहराव का पता लगाना।
- विभाजक के रूप में (,) के साथ प्रत्येक मान को अलग करें और कॉलम
CL2
में जोड़ें:
- विभाजक के रूप में (,) के साथ प्रत्येक मान को अलग करें और कॉलम
CL1 CL2 CL3 CL4
0 'A B C' 'A,B,C' NaN NaN
1 'C A N' 'C,A,N' NaN NaN
- कॉलम
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
- स्तंभ
CL4
. का संघ (सांख्यिकी से सिद्धांत निर्धारित करें)
- स्तंभ
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] ]
- नए कॉलम
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
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।