मैं एक समूह के अनुसार डेटाफ्रेम की पंक्तियों को कम करने की कोशिश कर रहा हूं। यहाँ एक उदाहरण है। मैं निम्नलिखित डेटा को परिभाषित कहते हैं:पांडा का उपयोग करके, मैं समूह द्वारा एक बड़े डेटाफ्रेम को कुशल तरीके से कैसे कम कर सकता हूं?
from pandas import *
df = DataFrame({'group1' : ["a","b","a","a","b","c","c","c","c",
"c","a","a","a","b","b","b","b"],
'group2' : [1,2,3,4,1,3,5,6,5,4,1,2,3,4,3,2,1],
'value' : ["apple","pear","orange","apple",
"banana","durian","lemon","lime",
"raspberry","durian","peach","nectarine",
"banana","lemon","guava","blackberry","grape"]})
अगर मैं समूह group1
और group2
द्वारा, फिर प्रत्येक समूह में पंक्तियों की संख्या यहाँ है:
In [190]: df.groupby(['group1','group2'])['value'].agg({'count':len})
Out[190]:
count
a 1 2
2 1
3 2
4 1
b 1 2
2 2
3 1
4 1
c 3 1
4 1
5 2
6 1
(अगर वहाँ के लिए एक और भी अधिक संक्षिप्त तरीके से है गणना करें, कृपया बताएं।)
अब मैं एक डेटाफ्रेम बनाना चाहता हूं जिसमें प्रत्येक समूह से एक यादृच्छिक रूप से चुनी गई पंक्ति हो। मेरा प्रस्ताव ऐसा करना है:
In [215]: from random import choice
In [216]: grouped = df.groupby(['group1','group2'])
In [217]: subsampled = grouped.apply(lambda x: df.reindex(index=[choice(range(len(x)))]))
In [218]: subsampled.index = range(len(subsampled))
In [219]: subsampled
Out[219]:
group1 group2 value
0 b 2 pear
1 a 1 apple
2 b 2 pear
3 a 1 apple
4 a 1 apple
5 a 1 apple
6 a 1 apple
7 a 1 apple
8 a 1 apple
9 a 1 apple
10 a 1 apple
11 a 1 apple
जो काम करता है। हालांकि, मेरे वास्तविक डेटा में लगभग 2.5 मिलियन पंक्तियां और 12 कॉलम हैं। अगर मैं अपने स्वयं के डेटा संरचनाओं का निर्माण करके गंदे तरीके से ऐसा करता हूं, तो मैं इस ऑपरेशन को सेकंड के मामले में पूरा कर सकता हूं। हालांकि, उपरोक्त मेरा कार्यान्वयन 30 मिनट के भीतर समाप्त नहीं होता है (और यह स्मृति-सीमित प्रतीत नहीं होता है)। एक साइड नोट के रूप में, जब मैंने आर में इसे लागू करने का प्रयास किया, तो मैंने पहले plyr
की कोशिश की, जो उचित समय में भी समाप्त नहीं हुआ; हालांकि, data.table
का उपयोग कर एक समाधान बहुत तेजी से समाप्त हुआ।
pandas
के साथ तेजी से काम करने के लिए मैं इसे कैसे प्राप्त करूं? मैं इस पैकेज को प्यार करना चाहता हूं, इसलिए कृपया मदद करें!
मैंने इस बारे में pystatsmodels मेलिंग सूची पर जवाब दिया। मैं आपके द्वारा सुझाए गए एक ही समाधान के साथ आया - पैकेज लेखक होने के नाते मुझे बेहतर तरीके से पता नहीं है =) –
@ वेसम, मैं बस यहां आपके उत्तर को पार करने वाला था। सबको धन्यवाद! –