2017-07-10 5 views
5

गिनती मैं पाइथन पांडा का उपयोग कर रहा हूं। मुझे एक स्ट्रिंग के साथ एक कॉलम मिला है और मैं कॉलम के बीच क्रॉसिंग करना चाहता हूं।पांडा क्रॉसस्टैब्यूलेशन और

जैसे मैं निम्नलिखित इनपुट

1: Andi 
2: Andi, Cindy 
3: Thomas, Cindy 
4: Cindy, Thomas 

मिल गया है और मैं निम्नलिखित उत्पादन करना चाहते हैं:

इसलिए, एंडी और थॉमस के संयोजन डेटा में प्रकट नहीं होता है, लेकिन सिंडी और थॉमस दो बार दिखाई देता है।

  Andi Thomas Cindy 
    Andi 1  0  1 
    Thomas 0  1  2 
    Cindy 1  2  1 

क्या किसी को कोई विचार है कि मैं इसे कैसे संभाल सकता हूं? यह वास्तव में बहुत अच्छा होगा!

बहुत धन्यवाद और सादर,

Andi

उत्तर

9

आप डमी कॉलम पहले उत्पन्न कर सकते हैं:

df['A'].str.get_dummies(', ') 
Out: 
    Andi Cindy Thomas 
0  1  0  0 
1  1  1  0 
2  0  1  1 
3  0  1  1 

और का उपयोग करें कि डॉट उत्पाद में:

tab = df['A'].str.get_dummies(', ') 

tab.T.dot(tab) 
Out: 
     Andi Cindy Thomas 
Andi  2  1  0 
Cindy  1  3  2 
Thomas  0  2  2 

विकर्ण प्रविष्टियों आपको प्रत्येक व्यक्ति के लिए घटनाओं की संख्या देगा। यदि आपको विकर्णों को 1 पर सेट करने की आवश्यकता है, तो several alternatives हैं। उनमें से एक np.fill_diagonal numpy से है।

co_occurrence = tab.T.dot(tab)  
np.fill_diagonal(co_occurrence.values, 1)  
co_occurrence 
Out: 
     Andi Cindy Thomas 
Andi  1  1  0 
Cindy  1  1  2 
Thomas  0  2  1 
+1

महान उत्तर! (-; – piRSquared

+0

@piRSquared धन्यवाद। :) – ayhan

+2

@ayhan यही कारण है कि मुझे स्टैक ओवरफ़्लो पसंद है। श्रृंखला से क्रॉसस्टैब रिपोर्ट की गणना करने के लिए मैं '.dot' का एक बड़ा उपयोग सीखता हूं। +1 –