यह apply
के साथ एक GroupBy वस्तु से एकत्रित मूल्यों के किसी भी संख्या वापस जाने के लिए संभव है। बस, एक श्रृंखला वापस करें और सूचकांक मान नए कॉलम नाम बन जाएंगे।
की एक त्वरित उदाहरण देखते हैं:
df = pd.DataFrame({'group':['a','a','b','b'],
'd1':[5,10,100,30],
'd2':[7,1,3,20],
'weights':[.2,.8, .4, .6]},
columns=['group', 'd1', 'd2', 'weights'])
df
group d1 d2 weights
0 a 5 7 0.2
1 a 10 1 0.8
2 b 100 3 0.4
3 b 30 20 0.6
कि apply
को दे दिया जाएगा एक कस्टम फ़ंक्शन निर्धारित करें। यह स्पष्ट रूप से डेटाफ्रेम स्वीकार करता है - जिसका अर्थ है data
पैरामीटर डेटाफ्रेम है। सूचना है कि यह कैसे एकाधिक स्तंभों का उपयोग करता है, जो agg
GroupBy विधि के साथ संभव नहीं है:
def weighted_average(data):
d = {}
d['d1_wa'] = np.average(data['d1'], weights=data['weights'])
d['d2_wa'] = np.average(data['d2'], weights=data['weights'])
return pd.Series(d)
कॉल हमारे कस्टम समारोह के साथ GroupBy apply
विधि:
df.groupby('group').apply(weighted_average)
d1_wa d2_wa
group
a 9.0 2.2
b 58.0 13.2
आप भारित precalculating करके बेहतर प्रदर्शन प्राप्त कर सकते हैं अन्य उत्तरों में समझाए गए नए डेटाफ्रेम कॉलम में कुल मिलाकर apply
पूरी तरह से उपयोग करने से बचें।
यह कुछ संचालनों में इसे तोड़ने के लिए और अधिक कुशल हो सकता है: (1) वजन का एक स्तंभ बनाएं, (2) उनके वजन से अवलोकनों को सामान्यीकृत करें, (3) गणना किए गए अवलोकनों के समूहीकृत समूह और समूहबद्ध वजन की मात्रा, (4) वजन के योग द्वारा अवलोकनों के भारित योग को सामान्यीकृत करें। – kalu
क्या होगा यदि हम कई चर (कॉलम) के wavg की गणना करना चाहते हैं, उदा। डीएफ ['भार'] को छोड़कर सबकुछ? – CPBL
@Wes, क्या कोई भी तरीका 'agg() 'और' lpda' 'np.average (... weights = ...)' के आसपास बनाया गया था, या भारित के लिए पांडा में कोई भी नया मूल समर्थन इसका मतलब है कि यह पोस्ट पहली बार दिखाई दिया था? –