2017-04-25 176 views
5

通常在使用.apply()方法時,會傳遞一個函數,該函數只需要一個參數。Pandas GroupBy:應用帶兩個參數的函數

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) 

有什麼辦法,使這項工作?我不能通過groupsomefunction,因爲在後臺神奇地完成了.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

@mischi很高興我能幫到你。 – piRSquared

1

通過關鍵字參數可以使一個匿名函數

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

相關問題