मैंने डेटा-फ्रेम के प्रत्येक कॉलम पर सारांश आंकड़े चलाने के लिए अक्सर पांडा 'agg()
फ़ंक्शन का उपयोग किया है।पायथन पांडा: समूहby() और agg() का उपयोग करते समय ऑर्डर संरक्षित है?
df = pd.DataFrame({'A': ['group1', 'group1', 'group2', 'group2', 'group3', 'group3'],
'B': [10, 12, 10, 25, 10, 12],
'C': [100, 102, 100, 250, 100, 102]})
>>> df
[output]
A B C
0 group1 10 100
1 group1 12 102
2 group2 10 100
3 group2 25 250
4 group3 10 100
5 group3 12 102
उन दोनों मामलों में, क्रम में है कि अलग-अलग पंक्तियों agg समारोह के लिए भेजा जाता कोई फर्क नहीं पड़ता: उदाहरण के लिए, यहाँ आप कैसे माध्य और मानक विचलन का उत्पादन होता है। लेकिन निम्न उदाहरण है, जो विचार करें:
df.groupby('A').agg([np.mean, lambda x: x.iloc[1] ])
[output]
mean <lambda> mean <lambda>
A
group1 11.0 12 101 102
group2 17.5 25 175 250
group3 11.0 12 101 102
इस मामले में लैम्ब्डा कार्यों के रूप में इरादा, प्रत्येक समूह में दूसरी पंक्ति outputting। हालांकि, मुझे पांडा दस्तावेज में कुछ भी नहीं मिला है जिसका अर्थ है कि यह सभी मामलों में सत्य होने की गारंटी है। मैं भारित औसत फ़ंक्शन के साथ agg()
का उपयोग करना चाहता हूं, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि फ़ंक्शन में आने वाली पंक्तियां उसी डेटा क्रम में होंगी जैसा वे मूल डेटा फ्रेम में दिखाई देते हैं।
क्या किसी को पता है कि आदर्श रूप से डॉक्स या पांडा स्रोत कोड में कहीं भी, अगर यह मामला होने की गारंटी है?
हाँ, मैं किसी भी गारंटी देता है कि आदेश डॉक्स में संरक्षित है नहीं देख सकते हैं, तो यह थोड़ा मूर्ख इस पर निर्भर प्रतीत होता है। अगर ऑर्डरिंग आपके 'बी' कॉलम द्वारा प्रतिबिंबित होती है तो आप सुनिश्चित करने के लिए लैम्बडा के भीतर प्रत्येक समूह को 'बी' द्वारा सॉर्ट कर सकते हैं। – Marius
दुर्भाग्य से मैं उन स्तंभों द्वारा आदेशित पंक्तियां रखना चाहता हूं जो एकत्रीकरण में शामिल नहीं हैं। डेटा फ्रेम को 'agg()' कॉल से पहले क्रमबद्ध किया जाता है, इसलिए यह केवल एक समस्या है यदि यह इसे 'groupby() 'के हिस्से के रूप में संदर्भित करता है। – BringMyCakeBack