2017-04-25 16 views
5

iki bağımsız değişkenli bir işlev uygulayın Genellikle .apply() yöntemini kullanırken, tam olarak bir bağımsız değişken alan bir işlev iletir.Pandas GroupBy:

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

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

Burada somefunction döndürülen her group için uygulanır. Temel olarak bu example here kullanıyorum.

ColumnC sütun ismini önceden belirtme yetkisine sahip olmak istiyorum . somefunction argümanı olarak geçilmesi kodu daha esnek hale getirecektir.

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

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

Bu çalışmayı yapmanın bir yolu var mı? Arka planda .apply() tarafından sihirli bir şekilde yapıldığı için group'u somefunction'a geçiremiyorum.

cevap

6

Eğer sen isimsiz işlev yapabilir 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

Bu beklenenden daha kolaydı. Teşekkürler! –

+0

@mischi memnuniyet yardımcı olabilir. – piRSquared

1

içinden anahtar sözcük argümanlar iletebilirsiniz

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