2014-10-14 11 views
9

के साथ agg() को एकाधिक कार्यों को पास करना मैं पांडास dataframe.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, np.std]) 

[output] 
      B    C    
     mean  std mean   std 
A           
group1 11.0 1.414214 101 1.414214 
group2 17.5 10.606602 175 106.066017 
group3 11.0 1.414214 101 1.414214 

और मुझे पता है आप पास कर सकते हैं एक भी कार्य करने के लिए तर्क:

df.groupby('A').agg(np.std, ddof=0) 

[output] 
      B C 
A    
group1 1.0 1 
group2 7.5 75 
group3 1.0 1 

लेकिन वहाँ एक या एक से उन दोनों के लिए तर्क के साथ साथ कई कार्यों को पारित करने के लिए एक रास्ता है? मैं दस्तावेज़ों में df.groupby('A').agg([np.mean, (np.std, ddof=0)]) जैसे कुछ ढूंढने की उम्मीद कर रहा था, लेकिन अभी तक कोई भाग्य नहीं है। कोई विचार?

उत्तर

13

ठीक है, docs कुल मिलाकर वास्तव में थोड़ा सा कमी है। तर्कों के सही उत्तीर्ण होने के साथ इसे संभालने का एक तरीका हो सकता है, और आप उस के लिए पांडा के स्रोत कोड को देख सकते हैं (शायद बाद में मैं)।

हालांकि, आप आसानी से कर सकता है:

df.groupby('A').agg([np.mean, lambda x: np.std(x, ddof=0)]) 

और यह बस के रूप में अच्छी तरह से काम करेगा।

+0

चालाक! यही वही है जो मुझे चाहिए। – BringMyCakeBack

+6

2 लैम्ब्डा कार्यों को पार करने के बारे में क्या? मुझे हेडर के साथ कोई समस्या है। – Dickster

संबंधित मुद्दे