मेरे मामले में मेरे पास एक पांडा श्रृंखला थी जहां मूल्य पात्रों के ट्यूपल्स हैं :
Out[67]
0 (H, H, H, H)
1 (H, H, H, T)
2 (H, H, T, H)
3 (H, H, T, T)
4 (H, T, H, H)
इसलिए मैं श्रृंखला को फ़िल्टर करने के लिए अनुक्रमणिका का उपयोग कर सकता हूं, लेकिन मुझे आवश्यक सूचकांक बनाने के लिए apply। मेरी शर्त है "सभी टुपल्स ढूंढें जिनमें बिल्कुल एक 'एच' है।"
series_of_tuples[series_of_tuples.apply(lambda x: x.count('H')==1)]
मैं मानता हूं कि यह "चेनेबल" नहीं है , (यानी नोटिस मैं series_of_tuplesदो बार दोहराता हूं ; आपको किसी भी अस्थायी श्रृंखला को एक चर में संग्रहित करना चाहिए ताकि आप उस पर लागू (...) कॉल कर सकें)।
अन्य तरीके भी हो सकते हैं (इसके अलावा .apply(...)) जो बूलियन इंडेक्स बनाने के लिए एलिमेंट वाइज संचालित कर सकते हैं।
कई अन्य उत्तर (स्वीकृत उत्तर सहित) श्रृंखलाबद्ध कार्यों का उपयोग कर जैसे:
.compress()
.where()
.loc[]
[]
ये कॉलबल्स (लैम्ब्डा) को स्वीकार करते हैं जो श्रृंखला में लागू होते हैं , न कि उन श्रृंखलाओं में व्यक्तिगत मूल्यों के लिए !
इसलिए मेरी टुपल्स की श्रृंखला ने अजीब व्यवहार किया जब मैंने अपनी उपरोक्त स्थिति / कॉल करने योग्य / लैम्ब्डा का उपयोग करने का प्रयास किया, जैसे कि किसी भी श्रृंखलाबद्ध कार्य के साथ .loc[]:
series_of_tuples.loc[lambda x: x.count('H')==1]
त्रुटि उत्पन्न करता है:
KeyError: 'Level H को नाम (कोई नहीं) के समान होना चाहिए'
मैं बहुत उलझन में था, लेकिन यह Series.count series_of_tuples.count(...)फ़ंक्शन का उपयोग करता प्रतीत होता है , जो कि मैं नहीं चाहता था।
मैं मानता हूं कि एक वैकल्पिक डेटा संरचना बेहतर हो सकती है:
- एक श्रेणी डेटाटाइप
- डेटाफ्रेम (टपल का प्रत्येक तत्व एक स्तंभ बन जाता है)
- स्ट्रिंग्स की एक श्रृंखला (केवल एक साथ टुपल्स को मिलाएं):
यह स्ट्रिंग्स की एक श्रृंखला बनाता है (यानी टपल को समाहित करके, एकल स्ट्रिंग में टपल में वर्णों को जोड़कर)
series_of_tuples.apply(''.join)
तो मैं तो श्रृंखला का उपयोग कर सकते हैंSeries.str.count
series_of_tuples.apply(''.join).str.count('H')==1