2017-04-25 4 views
5

आमतौर पर .apply() विधि का उपयोग करते समय, कोई एक फ़ंक्शन पास करता है जो वास्तव में एक तर्क लेता है।पांडस समूह द्वारा: दो तर्कों के साथ एक फ़ंक्शन लागू करें

def somefunction(group): 
    group['ColumnC'] == group['ColumnC']**2 
    return group 

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 

यहाँ somefunction प्रत्येक group है, जो तब दिया जाता है के लिए लागू किया जाता है। असल में मैं इस example here का उपयोग कर रहा हूं।

मैं कॉलम नाम ColumnC निर्दिष्ट करने की क्षमता नहीं चाहता हूं। somefunction के तर्क के रूप में इसे पास करने से कोड अधिक लचीला हो जाएगा।

def somefunction(group, column_name): 
    group[column_name] == group[column_name]**2 
    return group 

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction) 

क्या यह काम करने का कोई तरीका है? मैं group से somefunction पास नहीं कर सकता, क्योंकि यह पृष्ठभूमि में .apply() द्वारा जादुई रूप से किया जाता है।

उत्तर

6

आप apply

df.groupby(['ColumnA', 'ColumnB']).apply(somefunction, column_name='col') 

MCVE

df = pd.DataFrame(dict(A=list(range(2)) * 5, B=range(10)[::-1])) 

def f(df, arg1): 
    return df * arg1 

df.groupby('A').apply(f, arg1=3) 

    A B 
0 0 27 
1 3 24 
2 0 21 
3 3 18 
4 0 15 
5 3 12 
6 0 9 
7 3 6 
8 0 3 
9 3 0 
+0

यह अपेक्षा से आसान था। धन्यवाद! –

+0

@ मिस्ची खुश मैं मदद कर सकता था। – piRSquared

1

के माध्यम से महत्वपूर्ण शब्द तर्क पारित कर सकते हैं आप एक गुमनाम समारोह बना सकते हैं

df.groupby(['ColumnA', 'ColumnB']).apply(lambda x: somefunction(x, 'col'))

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