किसी भी समूह की वस्तु से किसी भी संख्या में कुल मूल्यों को वापस करना संभव है apply। बस, एक श्रृंखला लौटाएं और सूचकांक मान नए कॉलम नाम बन जाएंगे।
आइए एक त्वरित उदाहरण देखें:
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। यह स्पष्ट रूप से एक DataFrame को स्वीकार करता है - मतलब dataपैरामीटर एक DataFrame है। ध्यान दें कि यह कई स्तंभों का उपयोग कैसे करता है, जो समूह aggविधि से संभव नहीं है :
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)
applyहमारे कस्टम फ़ंक्शन के साथ ग्रुपबी विधि को कॉल करें :
df.groupby('group').apply(weighted_average)
d1_wa d2_wa
group
a 9.0 2.2
b 58.0 13.2
आप अन्य जवाबों में बताए अनुसार नए डेटाफ्रेम कॉलम में भारित योगों को पहले से निर्धारित करके बेहतर प्रदर्शन प्राप्त कर सकते applyहैं।